2010-11-20 7 views
2

Kurz gesagt kann ich nicht auf alle Pixel eines Bitmap-Bildes zugreifen.Wie kann man auf Pixel eines Bitmap-Bildes auf Android zugreifen?

Ich habe eine Absicht verwendet, um die native Kamera-Anwendung zu starten und ein Bitmap-Bild an meine Anwendungsaktivität zurückgegeben. Die Daten sind definitiv ein Bitmap-Objekt und ich bin in der Lage, anzuzeigen, erhalten Sie die Höhe/Breite etc und Zugriff auf einige Pixel mit getPixel(). Wenn ich jedoch die Werte von getHeight() und getWidth() verwende, bekomme ich einen Array-Fehler außerhalb der Grenzen. Durch Trail und Error habe ich festgestellt, dass ich nur auf eine reduzierte Anzahl von Pixeln des Bildes zugreifen kann, beispielsweise mit einem Bild, das einen Höhen- und Breitenwert von 420.380 zurückgibt, könnte ich auch auf 200.100 zugreifen. Ich mache dann einige Bildbearbeitung und verwendet setPixel() auf das Originalbild. Wenn ich das Bild zeige, zeigt es die, sagen wir 200,100, Verarbeitungspixel und der Rest normal, deshalb sind die Pixel offensichtlich da und für Android erreichbar, aber nicht von mir. Ich muss mit anderen Leuten sprechen, die dieses Problem mit Bildern hatten.

Weiß jemand mehr darüber, Gründe? oder eine Arbeit?

Vielen Dank im Voraus.

Es scheint, dass es keinen Weg gibt, glaubt jemand, dass es besser/möglich wäre, das Bild direkt im Speicher zu verwenden, vielleicht mit dem NDK?

Antwort

1

Haben Sie eine Antwort von Albert Pucciani in den Androiden-Foren. Ich erstelle jetzt einen int buffer und kopiere die Pixel darauf, dann benutze get() und put(), um die Pixel zu extrahieren. Es ist auch viel schneller get() und put() anstelle der get/setPixel() aus der Bitmap Klasse zu verwenden. Müssen Sie jetzt testen, ob dies alle Pixel für alle Bilder in den Puffer zurückgibt.

Nach weiteren Tests habe ich festgestellt, dass dies nur ein Speicherproblem ist, da die für jeden Prozess zugewiesene Menge alle Bitmaps enthält.

1

Sie können nicht auf das Pixel bei (getWidth(), getHeight()) in einem beliebigen Bild zugreifen, da sie wie alles andere 0-indexiert sind. Der gültige Bereich von Pixeln ist (0 bis getWidth() - 1, 0 bis getHeight() - 1) und somit wird das unterste rechte Pixel durch b.getPixel (b.getWidth() - 1, b.getHeight() - 1).

+0

Danke für die Antwort, Yeah, ich bin mir bewusst, 0-indiziert, das Problem ist, kann ich nicht mehr als die Hälfte der Pixel zugreifen. Grundsätzlich habe ich einige verschachtelte for-Schleifen (int y = 0; y

Verwandte Themen