2016-07-14 8 views
1

Ich habe eine Verarbeitungsalgo, die gut funktioniert, wenn ich jeden Farbkanal getrennt verarbeite. Aber als ich versuchte, den ganzen Pixelwert zu verarbeiten, haben die Dinge verpasst. Die Ergebnisse sind nicht gut. Jetzt möchte ich den 3 Farbkanal vom Pixelwert isolieren (Alpha ausschließen) und dann an dem neuen Wert (den 3 Kanälen) arbeiten. Wie kann ich das in C++ tun? Ich weiß, dass ich das RGB_565-Bitmap-Format ausprobiert habe, was keine gute Lösung ist. und zu wissen, dass ich das RGB in eine 24-Bit-Variable zusammenführen möchte.NDK - RGB-Wert ohne Alpha von einer ARGB_8888 Bitmap verarbeiten

+0

Können Sie einen Code posten, den Sie bereits ausprobiert haben? – gregn3

Antwort

1

Sie können auf jeden Kanal separat zugreifen. Der genaue Weg hängt vom tatsächlichen Pixelformat ab.

ANDROID_BITMAP_FORMAT_RGBA_8888: Jedes Pixel ist 4 Byte lang, das Layoutmuster ist RGBARGBA ..., dh das 1. Pixel ist eine rote Komponente, die 2-d ist grün, die 3-d ist blau und die 4- th ist Alpha-Komponente.

ANDROID_BITMAP_FORMAT_RGB_565: jedes Pixel 2 Byte lang, in nativer endianness gespeichert, so dass Farbkomponenten in der nächsten Weise können extrahiert werden:

red = (u16_pix >> 11) & 0x1f; 
green = (u16_pix >> 5) & 0x3f; 
blue = (u16_pix >> 0) & 0x1f; 

ANDROID_BITMAP_FORMAT_RGBA_4444

: wegen der schlechten Qualität veraltet ist, sollten Sie nicht Denken Sie auch über diese

ANDROID_BITMAP_FORMAT_A_8: ist 1 Byte pro Pixel und für Alpha-only oder Graustufenbilder konzipiert. Es ist wahrscheinlich nicht das, wonach Sie suchen.

Beachten Sie, dass Android kein 24bpp-Format hat und Sie 32bpp oder 16bpp eins wählen müssen. Zu Ihrem Algorithmus: Es gibt zwei Alternativen: Code kann auf einzelne Komponenten innerhalb des gepackten Pixelwerts zugreifen, oder Sie können gepackte Pixel in wenige Ebenen, d. H. Arrays, entschachteln, von denen jeder nur einen Kanal enthält. Nach der Verarbeitung können Sie sie wieder in einem der unterstützten Formate verschachteln oder in ein anderes Format umwandeln, an dem Sie interessiert sind.