我正在制作android应用程序,我试图从textureview拍摄的位图图像生成视频。在这里,我可以从TextureView中获得位图图像,并将其保存在内部存储中,以便以后生成视频。但问题是,随着位图图像被创建并保存在本地存储中,应用程序的堆大小也在迅速增长,在将大约800个图像保存为.png文件后,它给出了OutOfMemory异常,将目标GC堆从258MB钳位到256MB。那么,如何避免堆增长呢?
Bitmap bitmap = textureView.getBitmap(TF_OD_API_INPUT_SIZE, TF_OD_API_INPUT_SIZE);
if(croppedBitmap!=null){
croppedBitmap=null;
}
croppedBitmap = Bitmap.createBitmap((int) canvasWidth, (int) canvasHeight, Bitmap.Config.ARGB_8888);
@Override
public void onSurfaceTextureUpdated(SurfaceTexture texture) {
if(Utils.isVideoRecordingStarted(activity)){
//if it already has bitmap recycle it to create room
if(mToVideo!=null){
mToVideo.recycle();
mToVideo=null;
}
if(newImage!=null){
newImage.recycle();
newImage=null;
}
//hold bitmap image
mToVideo = textureView.getBitmap(VideoManagerConfig.VIDEO_WIDTH,VideoManagerConfig.VIDEO_HEIGHT);
if(mToVideo!=null) {
if(activity.getResources().getConfiguration().orientation!=ORIENTATION_PORTRAIT){
mToVideo = textureView.getBitmap(VideoManagerConfig.VIDEO_HEIGHT,VideoManagerConfig.VIDEO_WIDTH);
if(mToVideo!=null){
newImage = Utils.RotateBitmap(mToVideo.copy(mToVideo.getConfig(),true),90);
Log.i(ObjectDetectionCameraImpl.TAG,"W: "+newImage.getWidth()+", H: "+newImage.getHeight());
SaveToLocalStorage(newImage);
}
}else {
SaveToLocalStorage(mToVideo.copy(mToVideo.getConfig(),true));
}
mToVideo=null;
}
}else if(isInitilizedVideo && !Utils.isVideoRecordingStarted(activity)){
//video stopped and has something to encode
imageFromTextureListener.getBuffer(getBufferMetaData());
}
}
};
VideoManager:images_924.png//表示已有925张图像保存在本地,索引从0开始
缓冲区:925/1800//此处1800=>将保存的图像总数
Following the link to log file:
https://drive.google.com/open?id=1GxFV-h2V68FSoWRs9K1AYhZChnlTFFqq
在尝试缩放图像时发生的类似问题(但在java中)在这里得到了如下回答:除非发生垃圾收集,否则JVM(android使用ART)会在需要时不断扩展堆,一直扩展到给定的完整堆大小。简言之,
Java进程可以自由地使用您给它的所有内存。
问题内容: 在Django中上传图片后,如何轻松调整其大小?我正在使用Django 1.0.2,并且已经安装了PIL。 我当时正在考虑重写Model的save()方法以调整其大小,但是我真的不知道如何开始并覆盖它。 有人可以指出我正确的方向吗?谢谢 :-) @GuðmundurH:这将不起作用,因为django-stdimage软件包在Windows上不起作用 问题答案: 在这种方法中,你可以将块
我想在我的Android应用程序中增加位图的大小。 基本上,我想创建一个新的位图,其宽度与原始位图相同,但高度更大。(新)额外像素的背景可以是黑色、白色或透明。 我该怎么做?
私人意图cameraIntent=null;
谁能指导我怎么做这件事吗? 我是一个新的android所以请,如果我能有一个详细的程序,我会很感激。
我正在使用一个库从url获取图像并将其作为位图图像保存到缓存中。但是当我检索该图像时,它非常小。如何根据手机屏幕增加位图图像的高度和宽度?这是创建位图的类。
结果在性能较慢的情况下,有一种更快的方法来获得位图。使用NDK是否更好? 查找实际示例