alpha-transparency

___ qstntxt ___

Ich versuche auf die Rohdaten einer Bitmap im ARGB_8888-Format auf Android zuzugreifen, indem ich die Methoden %code% und %code% verwende. Der Aufruf dieser Aufrufe scheint jedoch immer den Alphakanal auf die RGB-Kanäle anzuwenden. Ich brauche die Rohdaten in einem Byte [] oder ähnlich (um JNI zu passieren; ja, ich weiß über Bitmap.h in Android 2.2, kann das nicht verwenden).

Hier ist ein Beispiel:

%Vor%

Das Protokoll zeigt dann

%Vor%

Ich verstehe, dass die Reihenfolge der Argb-Kanäle unterschiedlich ist; das ist gut. Aber ich nicht möchte, dass der Alphakanal auf jede Kopie angewendet wird (was es zu tun scheint).

Sollen %code% und %code% funktionieren? Gibt es any Möglichkeit, um die Rohdaten in einem Byte []?

zu erhalten

Als Antwort auf die Antwort unten hinzugefügt:

Putting in %code% vor der %code% ändert das Ergebnis, aber immer noch nicht so, wie ich es will:

%Vor%

Scheint im Wesentlichen das gleiche Problem zu haben (Alpha wird auf jede %code% angewendet).

    
___ qstnhdr ___ Zugriff auf Rohdaten in ARGB_8888 Android Bitmap ___ answer5010676 ___

Ich nehme an, dass dies mit der Byte-Reihenfolge des von Ihnen verwendeten ByteBuffers zu tun haben könnte. ByteBuffer verwendet standardmäßig Big Endian. Setze Endianess auf den Puffer mit

%Vor%

Sehen Sie, ob es hilft.

Darüber hinaus ändert copyPixelsFromBuffer / copyPixelsToBuffer die Pixeldaten in keiner Weise. Sie werden roh kopiert.

    
___ tag123bitmap ___ Der allgemeinere Begriff "Pixmap" bezieht sich auf eine Karte von Pixeln, in denen jeder mehr als zwei Farben speichern kann und somit mehr als ein Bit pro Pixel verwendet. Oft wird dafür auch Bitmap verwendet. In einigen Zusammenhängen impliziert der Begriff Bitmap ein Bit pro Pixel, während Pixmap für Bilder mit mehreren Bits pro Pixel verwendet wird. ___ tag123jni ___ Das Java Native Interface (JNI) bietet JVM-Implementierungen die Möglichkeit, systemeigenen Code auszuführen, und nativen Code kann Java-Code ausführen (indem neue JVM-Instanzen erstellt werden). Die gebräuchlichsten Zielsprachen für JNI sind C und C ++, für die zumindest die Sun / Oracle JDK-Implementierungen Hilfsbefehle (javap, javah) bereitstellen. ___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ answer22429264 ___

Mir ist klar, dass dies sehr veraltet ist und dir wahrscheinlich jetzt nicht helfen wird, aber ich bin kürzlich auf dieses Problem gestoßen, als ich versucht habe, %code% in meiner App zu verwenden. (Danke, dass du diese Frage gestellt hast, übrigens! Du hast mir viel Zeit beim Debuggen gespart.) Ich füge diese Antwort in der Hoffnung hinzu, dass es anderen wie mir hilft, vorwärts zu gehen ...

Obwohl ich dies noch nicht verwendet habe, um sicherzustellen, dass es funktioniert, sieht es so aus, dass wir ab API Level 19 endlich eine Möglichkeit haben, anzugeben, dass wir das Alpha (aka Premultiply) nicht innerhalb von% anwenden sollen. Code%. Sie fügen eine %code% -Methode hinzu, die in Situationen helfen sollte wie folgt, indem wir uns erlauben, %code% anzugeben.

Ich hoffe, das hilft!

    
___ tag123argb ___ ARGB ist ein Farbcode, der von vielen Sprachen verwendet wird und für Alpha, Rot, Grün und Blau steht. ___ answer39038558 ___

Dies ist eine alte Frage, aber ich kam zum selben Problem und fand heraus, dass das Bitmap-Byte vormultipliziert wurde. Sie können die Bitmap (ab API 19) so einstellen, dass der Puffer nicht vormultipliziert wird, aber In der API geben sie keine Garantie.

Von den Dokumenten :

  

%code%

     

Legt fest, ob die Bitmap ihre Daten als vormultipliziert behandeln soll.   Bitmaps werden aus Performance-Gründen immer als vormultipliziert vom Ansichtssystem und Canvas behandelt. Das Speichern nicht vormultiplizierter Daten in einer Bitmap (über %code% , %code% oder %code% ) kann zu einer falschen Überblendung führen, wenn sie vom Framework gezeichnet wird.

     

Diese Methode wirkt sich nicht auf das Verhalten einer Bitmap ohne Alphakanal aus, oder wenn %code% false zurückgibt.

     

Aufruf von %code% oder %code% mit einer Quell-Bitmap, deren Farben nicht vormultipliziert sind, kann zu %code% führen, da diese Funktionen das Zeichnen der Quelle erfordern, was für nicht vor-multiplizierte Bitmaps nicht unterstützt wird.

    
___ answer26532116 ___

Eine Möglichkeit, auf Daten in Bitmap zuzugreifen, ist die Methode getPixels (). Unten finden Sie ein Beispiel, das ich verwendet habe, um Graustufenbild von Argb Daten und dann zurück von Byte-Array zu Bitmap (natürlich, wenn Sie rgb benötigen Sie 3x Bytes reservieren und speichern Sie alle ...):

%Vor%     
___ tag123alphatransparenz ___ Die Alpha-Transparenz eines Bildes definiert, wie transparent die Pixel dieses Bildes sind. In der Regel hat jedes Pixel einen Alpha-Wert zwischen 0 (vollständig transparent) und 255 (vollständig undurchsichtig). ___
1
Antwort

Android: VideoView-Hintergrund kann nicht transparent eingestellt werden

Ich habe einen VideoView, der ein Video spielt, dessen Form nicht rechteckig ist (d. h. ein rotierender Zylinder mit abgerundeten Ecken). Das Videobild wird in einem LinearLayout angezeigt, das eine Hintergrundfarbe hat. Ich möchte, dass der Hin...
21.12.2013, 15:21
2
Antworten

Android Alpha-Animation: Der Alpha-Wert springt nach dem Ende der Animation auf den alten Wert zurück

Ich habe eine ImageButton-Ansicht in einem Layout. Wenn die Benutzer auf den ImageButton klicken, sollte die Schaltfläche ausgeblendet werden. Die Animation zum Ausblenden der Schaltflächen wird wie folgt gestartet: %Vor% Das funktioniert...
25.05.2012, 14:27
4
Antworten

Zugriff auf Rohdaten in ARGB_8888 Android Bitmap

Ich versuche auf die Rohdaten einer Bitmap im ARGB_8888-Format auf Android zuzugreifen, indem ich die Methoden copyPixelsToBuffer und copyPixelsFromBuffer verwende. Der Aufruf dieser Aufrufe scheint jedoch immer den Alphakanal auf die RGB-...
15.02.2011, 22:59