Ecco la mia domanda. Resta con me dando una piccola spiegazione:byte [] in ushort []
Sto leggendo un'immagine tiff in buffer; Ogni pixel del mio tiff è rappresentato da un ushort (dati a 16 bit, non negativi).
La dimensione dell'immagine è 64 * 64 = 4096. Quando il mio tiff viene caricato nel buffer, la lunghezza del buffer è quindi 8192 (il doppio di 4096). Immagino sia perché nel mio buffer, il computer usa 2 byte per memorizzare un singolo valore di pixel.
Voglio ottenere il valore per ogni pixel particolare, in questo caso dovrei combinare ogni 2 byte in 1 ushort?
Ad esempio: 00000000 11111111 -> 0000000011111111?
Ecco il mio codice:
public static void LoadTIFF(string fileName, int pxlIdx, ref int pxlValue)
{
using (Tiff image = Tiff.Open(fileName, "r"))
{
if (image == null)
return;
FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH);
int width = value[0].ToInt();
byte[] buffer = new byte[image.StripSize()];
for (int strip = 0; strip < image.NumberOfStrips(); strip++)
image.ReadEncodedStrip(strip, buffer, 0, -1);
// do conversion here:
//ushort bufferHex = BitConverter.ToUInt16(buffer, 0);
image.Close();
}
}
Come faccio a leggere il byte [] tampone per garantire che posso ottenere i 16 bit ushort valore di pixel?
Grazie
Sì, penso di aver ottenuto il pixel che voglio. Grazie molto! –
Anche se l'offset sembra moltiplicato per 2, y è effettivamente (y-1) e lo stesso per x. Bene a seconda dell'indice basato su 0 o 1. –