2011-04-18 2 views
3

Je suis en train de lire un tableau d'octets image maintenant l'image est 16 bits (r: 5, g: 6, b: 5) et je voudrais le lire à BufferedImage.16 bit (565) lecture de l'image

J'ai essayé quelque chose comme:


int[] nBits = {5, 6, 5}; 
int[] bOffs = {0, 0, 0}; 
ColorModel colorModel = new ComponentColorModel(
     cs, nBits, false, false, 
     Transparency.OPAQUE, 
     DataBuffer.TYPE_BYTE); 
WritableRaster raster = Raster.createInterleavedRaster(
     new DataBufferByte(screenBuffer,screenBuffer.length), 
     foundWidth, foundHight, 
     foundWidth * 2, 2,bOffs, null); 

BufferedImage imgReconstructed = new BufferedImage(
     colorModel,raster,false,null); 

 

Mon problème avec les bandOffsets, comment dois-je le mettre à 16 image bit. Est-ce la bonne façon? Merci, Guy

Répondre

1

La méthode createInterleavedRaster seraient utilisées pour créer une image d'un modèle d'échantillon où chaque élément de données contient des informations de couleur pour une bande unique (à savoir rouge, vert ou bleu). Si vous souhaitez une image dans laquelle chaque élément de données 16 bits contient les 3 bandes de couleur, vous souhaitez utiliser l'une des méthodes createPackedRaster à la place. Le seul type de données seize bits pris en charge par ces modèles est unsigned short, donc vous devrez passer une instance DataBufferUShort.

Je n'ai actuellement pas accès à un compilateur pour créer un exemple de code de travail, mais la documentation de l'API SinglePixelPackedSampleModel expliquera un peu les paramètres du scanlineStride et du masque de bande. Si nécessaire, je mettrai à jour cette réponse plus tard avec plus de détails.