Ich versuche also, C++ - Code von einem Kollegen zu portieren, der Bilddaten über einen seriellen Bluetoth-Port ergreift (ich benutze ein Android-Telefon). Aus den Daten muss ich eine Bitmap generieren.BitmapFactory.decodeByteArray() gibt immer null zurück (manuell erstelltes Byte-Array)
Bevor ich den portierten Code getestet habe, habe ich diese Schnellfunktion an geschrieben, die ein reines rotes Rechteck erzeugt. BitmapFactory.decodeByteArray() schlägt jedoch immer fehl und wird mit einer Null-Bitmap zurückgegeben. Ich habe nach beiden möglichen Ausnahmen gesucht, die geworfen werden können und keiner wird geworfen.
byte[] pixelData = new byte[225*160*4];
for(int i = 0; i < 225*160; i++) {
pixelData[i * 4 + 0] = (byte)255;
pixelData[i * 4 + 1] = (byte)255;
pixelData[i * 4 + 2] = (byte)0;
pixelData[i * 4 + 3] = (byte)0;
}
Bitmap image = null;
logBox.append("Creating bitmap from pixel data...\n");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.outWidth = 225;
options.outHeight = 160;
try {
image = BitmapFactory.decodeByteArray(pixelData, 0, pixelData.length, options);
} catch (IllegalArgumentException e) {
logBox.append(e.toString() + '\n');
}
//pixelData = null;
logBox.append("Bitmap generation complete\n");
decodeByteArray() Code:
public static Bitmap decodeByteArray(byte[] data, int offset, int length, Options opts) {
if ((offset | length) < 0 || data.length < offset + length) {
throw new ArrayIndexOutOfBoundsException();
}
Bitmap bm;
Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap");
try {
bm = nativeDecodeByteArray(data, offset, length, opts);
if (bm == null && opts != null && opts.inBitmap != null) {
throw new IllegalArgumentException("Problem decoding into existing bitmap");
}
setDensityFromOptions(bm, opts);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS);
}
return bm;
}
Ich würde davon ausgehen, dass es nativeDecodeByteArray() ist, die fehlschlägt.
Ich bemerke auch die Log-Nachricht:
D/skia: --- SkImageDecoder :: Fabrik null zurück
Wer irgendwelche Ideen hat?
'Aus den Daten muss ich eine Bitmap erzeugen.'. Welche Art von Daten erhalten Sie? Wenn Sie Bilddateien wie .png oder .jpg erhalten, ist Ihre Herangehensweise falsch. – greenapps
Der Grabbing-Algorithmus ist relativ komplex, aber im Wesentlichen, was ich erhalte, sind RGB-Daten für Pixel in Form von 3 Bytes - aber die Reihenfolge, in der die Daten kommen, ist aufgrund der Hardware-Implementierung keine aufeinanderfolgenden Pixel –