Próbuję radzić sobie z 16-bitów na kanał RGBA TIFF obrazów w języku C, nie mogłem znaleźć wiele informacji o 16-bitowych obrazów w specyfikacji.Obrazy TIFF: jak piksele obrazu 16 bit-RGBA są przeplatane?
W przypadku 8-bitowego obrazu RGBA na kanał, rozumiem, że piksel jest przechowywany jako uint32 i można go usunąć z przeplotu przez zgrupowanie 32 bitów na 4 grupy (R, G, B, A) z 8 bity. Wtedy do czynienia z 8 bitów na kanał RGBA obrazów, robię następujący (patrz także zamknięty kod źródłowy here):
- przechowywać dane obrazu jako zakładka UInt32 (używając TIFFReadRGBAImageOriented), które nazywam
data_tiff
- I przeplot pikseli za pomocą następujących poleceń:
(uint8) TIFFGetR(*data_tiff)
,(uint8) TIFFGetG(*data_tiff)
,(uint8) TIFFGetB(*data_tiff)
&(uint8) TIFFGetA(*data_tiff)
W przypadku 16 bitów na kanał RGBA obrazu, może mi pan powiedzieć, jak czy mogę usunąć przeplot pikseli? czy mogę retreive danych obrazu jako zakładka uint64, wtedy będę mógł wykonać następujące czynności:
#define TIFF16GetR(abgr) ((abgr) & 0xffff)
#define TIFF16GetG(abgr) (((abgr) >> 16) & 0xffff)
#define TIFF16GetB(abgr) (((abgr) >> 32) & 0xffff)
#define TIFF16GetA(abgr) (((abgr) >> 48) & 0xffff)`
- czytam dane obrazu jako zakładka uint64
- I przeplotu pikseli za pomocą
(uint16) TIFF16GetR(*data_tiff)
,(uint16) TIFF16GetG(*data_tiff)
,(uint16) TIFF16GetB(*data_tiff)
&(uint16) TIFF16GetA(*data_tiff)
ale wydaje się, że dane nie są natywnie przechowywane w karcie uint64, więc zastanawiam się, w jaki sposób są przeplatane 16-bitów na kanał obrazów do UIN zakładka t32 pixel.
ja też mam trudności stojące czynienia z 16-bitów grayscaled obrazy w taki sam sposób (używając TIFFReadRGBAImageOriented
aby uzyskać dane obrazu i próbują przekształcić każdy piksel w uint16)
Bardziej ogólnie, czy masz jakiś kawałek dokumentacji o 16-bitowych odcieniach szarości i kolorowych obrazach?
Dziękuję poważaniem
Rémy A.
Co rozumiesz przez słowo "tab" powyżej? Nie mogę tego przetworzyć ... Może to być "stół"? – unwind
Mam na myśli wskaźnik: uint32 * –