私は顔検出アプリを作成しており、バックグラウンド スレッドを使用しているメイン スレッドの負荷を軽減しています。コードを以下に示します。
Thread background = new Thread(new Runnable() {
public void run() {
Log.d ("Thread", "Thread has started");
for (Feature feat : mClassifierFiles.keySet()) {
mFaces.put(feat, cvHaarDetectObjects(grayImage, mClassifiers.get(feat), mStorages.get(feat), 1.1, 3,
CV_HAAR_DO_CANNY_PRUNING));
if (mFaces.get(feat).total() > 0) {
Size previewSize = camera.getParameters().getPreviewSize();
YuvImage yuvimage=new YuvImage(data, ImageFormat.NV21, previewSize.width, previewSize.height, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 100, baos);
byte[] jdata = baos.toByteArray();
Bitmap bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length);
saveImg(bmp);
}
postInvalidate();
opencv_core.cvClearMemStorage(mStorages.get(feat));
}
}
});
background.start ();
これで、画像の保存部分はメインスレッドで行う必要があることがわかりました。今私が得られないのは、「ビットマップbmp」をメインスレッドに送信する方法ですか?