2017-01-06 2 views
-1

Kann mir jemand die Art und Weise erklären setPixel() Methode funktioniert in Android? Ich versuche, einige Pixel in einer Bitmap zu ersetzen. Ich extrahiere sie mit der Methode getPixel() und ihre individuellen Farben, z. green = Color.green(a[i][j]);, aber ich kann sie keine neuen Werte zurück setzen, um das verarbeitete Bild auf dem Bildschirm zu zeigen.Probleme mit setPixel() -Methode

Bearbeiten: Dies ist, wo einige der Verarbeitung auftritt. Ich versuche, algorithmisch

for (int i = 0; i < grayWidth; i++) { 
      for (int j = 0; j < grayHeight; j++) { 
       a[i][j] = myImage.getPixel(i, j); 
       red = Color.red(a[i][j]); 
       green = Color.green(a[i][j]); 
       blue = Color.blue(a[i][j]); 
       gray = (red + green + blue)/3; 
       a[i][j] = gray; 
      } 
     } 

und ersetzen Sie dann Pixel in Graustufen zu umwandeln:

for (int m = 0; m < grayHeight; m++) { 
      for (int n = 0; n < grayWidth; n++) { 
       grayScale.setPixel(m, n, a[m][n]); 
      } 
     } 

und zeigen schließlich auf dem Bildschirm

imageView.setImageBitmap(grayScale); 

Es tut uns nicht gründlich in erster Linie erklären/

+0

Was ist die Fehlermeldung? Und Teile des Codes, wo Sie die Pixel erhalten und einstellen. –

+0

@DavidK Das verarbeitete Bild ist einfach nicht da. Die App verarbeitet sie, aber das Endergebnis wird nicht auf dem Bildschirm angezeigt, wenn drawBitmap verwendet wird. –

+0

Verwenden Sie die try/catch-Klausel, um die Ausnahmen abzufangen? Sie stürzen Ihre App möglicherweise nicht ab, können jedoch weiterhin auftreten. Gib uns auch einen Code .. –

Antwort

0
  1. Warum postet Fragen ohne Code? Versetzen Sie sich in unsere Position, wie können wir Ihnen helfen, wenn wir nicht wissen, was Sie zu tun versuchen? Sie präsentieren Ihr Problem nur in englischer Sprache, die in den meisten Fällen nicht der Programmiersprache entspricht. Wir wollen das Letztere sehen, unterstützt mit einer englischen Beschreibung dessen, was Sie tun und was gerade passiert.

  2. Basierend auf zur Verfügung gestellten Informationen und Android Dev Page for Bitmap, kann ich davon ausgehen, dass Ihr Bitmap-Bild nicht wandelbar sein könnte. Das würde dann IllegalStateException werfen, aber ohne deinen LogCat/Code zu sehen, kann ich nicht sicher sein, ob das der Fall ist.

  3. Wenn die Bitmap tatsächlich unveränderlich ist, können Sie versuchen, converting immutable bitmap to mutable zu betrachten und es erneut versuchen.

+0

Ich postete etwas Code, du hast recht leid –

+0

Ich sah, aber es gibt keinen Versuch/catch-Klausel, um festzustellen, ob setPixel etwas wirft. Auch auf der Android-Dev-Seite, die ich in meiner Antwort verlinkt habe, gibt es eine Methode 'setPixels()', die ein Array aufnimmt, so dass Sie nicht über jedes Pixel iterieren müssen. –

+0

Ok ich habe setPixels verwendet, aber ich bekomme den folgenden Fehler: java.lang.IllegalArgumentException: x + width muss <= bitmap.width() sein. Das Problem besteht darin, dass nach dem Debuggen der App die Variablenwerte mit dem Bild übereinstimmen, das ich verwende. Mein Beispiel ist ein 20x12px Bild. Wenn Sie den Code, den ich oben geschrieben habe, überprüfen, indem Sie diese Zeile 'grayScale.setPixels (b, 0, greyWidth, 0, 0, greyWidth, greyHeight) verwenden;' sollte den Job erledigen, richtig? –

Verwandte Themen