3 Stimmen

Android Eine Bitmap zur Laufzeit invertieren

Ich versuche, ein Bitmap umzukehren, indem ich einen Paint ColorFilter verwende Ich habe diesen Link als Referenz verwendet: http://www.mail-archive.com/android-developers@googlegroups.com/msg47520.html

aber es hat überhaupt keine Wirkung - das Bitmap wird normal gezeichnet, kannst du mir sagen, was ich falsch mache?

Definiere float array:

float invert [] = { 
        -1.0f,  0.0f,  0.0f,  1.0f,  0.0f, 
        0.0f,  -1.0f,  0.0f,  1.0f,  0.0f, 
        0.0f,  0.0f,  -1.0f,  1.0f,  0.0f, 
        1.0f,  1.0f,  1.0f,  1.0f,  0.0f 
}; 

Paint im Konstruktor einrichten

    ColorMatrix cm = new ColorMatrix(invert); 
    invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 

Referenz im Draw() Methode

c.drawBitmap(Bitmap, null, Screen, invertPaint);

BEARBEITEN: Es ist mir gelungen, es zum Laufen zu bringen, indem ich die Zuweisung von Paint in der Draw-Anweisung hatte:

ColorMatrix cm = new ColorMatrix(invert); 
invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 
c.drawBitmap(rm.getBitmap(DefaultKey), null, Screen, invertPaint);

aber jetzt rendert es sehr langsam (wahrscheinlich, weil es für jeden einzelnen Frame eine komplizierte Matrix einrichtet) ... gibt es einen Grund, warum es funktioniert, wenn es in derselben Methode ist?

BEARBEITEN2: KÜMMER DICH NICHT DARUM!!! Lol, das Problem war, dass ich zwei Konstruktoren hatte und ich den Colorfilter nur in einem davon konfiguriert habe... der Prozess ist immer noch sehr CPU-intensiv und verursacht Framerate-Probleme

0 Stimmen

Das ist eine ziemlich merkwürdige Matrix für eine Farbinversion. Sollte sie 5x4 sein?

1 Stimmen

Nicht sicher, was es bedeutet, aber es funktioniert... aber es ist langsam, wahrscheinlich lohnt es sich, einfach ein invertiertes Bitmap zu speichern und sie auszutauschen :/

4voto

Rene Punkte 3596

Dies ist ein alter Thread.

Allerdings: Die Matrix ist nicht gut für die Inversion von Anti-Aliasing-Bildern mit Transparenz.

Sollte sein:

float invert[] =
{
-1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 
0.0f, -1.0f, 0.0f, 1.0f, 1.0f,
0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 
0.0f, 0.0f, 0.0f, 1.0f, 0.0f
};

0 Stimmen

Das ist falsch. Sie möchten nicht, dass der Alpha-Kanal die Rot-, Grün- und Blaukanäle ändert (zweite von rechts). Die richtige Matrix wird als Beispiel in der Dokumentation angegeben: developer.android.com/reference/android/graphics/…

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X