在Java中,我讓用戶選擇一個圖像文件。然後我解碼它,轉換成PNG,然後傳遞給JNI。 我懷疑我不需要經常複製和分配太多內存。我怎樣才能削減這個?有沒有一種方法可以檢測圖像類型是JPEG還是PNG,而不是解碼&重新編碼位圖並傳遞原始的JPEG/PNG數據?或者用更少的分配來完成轉換?現在它正在吃掉很多的記憶。使用更少的內存將位圖傳遞給JNI
的Java:
Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 100, outStream);
byte[] byteData = outStream.toByteArray();
JNILib.PickedImage(byteData);
在C,我有以下的PickedImage代碼:
jbyte *b = (jbyte*)env->GetByteArrayElements(data, NULL);
jsize dataSize = env->GetArrayLength(data);
byte* imageData = (byte*)malloc(dataSize);
memcpy(imageData, b, dataSize);
env->ReleaseByteArrayElements(data, b, 0);
imageSelectCallback(imageData, dataSize);
看看[這個問題](http://stackoverflow.com/questions/9643228/ test-if-file-is-an-image) - 它可能會給你一些線索 – 2014-09-24 20:03:11