我知道不建议在onDraw()
方法中创建任何对象,所以我正在寻找另一种方法来解决这个问题。假设我有一个摄像头流,然后使用onPreviewFrame()
内的OpenCV库进行一些对象检测。
在onDraw()
方法中,我需要迭代所有检测到的对象,从输入图像中裁剪它们并缩放它们中的每一个,然后在原始位图上绘制这个裁剪的位图。
我当前的解决方案需要2个位图 - 一个是原始的,另一个用于绘图(我不在原始图像上绘制,因为可能会发生我会从图像中新对象的部分裁剪的东西已经画了。)
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvasTmp.setBitmap(mBitmap);
for (Object o:objects) {
Bitmap croppedBmp = Bitmap.createBitmap(mBitmapCopy, area_to_crop...);
croppedBmp Bitmap.createScaledBitmap(croppedBmp , new_size...);
canvasTmp.drawBitmap(croppedBmp, new_position)
}
canvas.drawBitmap(mBitmap, 0, 0, bitmapPaint);
}
创建mBitmap
和mBitmapCopy
的操作并不像我使用setPixels()
方法那么昂贵,但我想知道是否有任何方法可以摆脱每次迭代重新创建的位图?
由于