相关疑难解决方法(0)

将图像加载到Bitmap对象时出现奇怪的内存不足问题

我有一个列表视图,每行有几个图像按钮.单击列表行时,将启动新活动.由于相机布局有问题,我不得不建立自己的标签.为结果启动的活动是地图.如果我单击我的按钮启动图像预览(从SD卡加载图像),应用程序将从活动返回到活动返回到listview结果处理程序以重新启动我的新活动,这只是一个图像小部件.

列表视图上的图像预览正在使用光标和ListAdapter.这使得它非常简单,但我不确定如何放置一个经过调整大小的图像(即小的像素大小不像动态src图像按钮那样.所以我只是调整了从手机摄像头下来的图像.

问题是当我试图返回并重新启动第二个活动时,我收到内存不足错误.

  • 有没有办法我可以轻松地逐行构建列表适配器,我可以在运行中调整大小(有点明智)?

这是更好的,因为我还需要对每行中的小部件/元素的属性进行一些更改,因为焦点问题我无法选择带触摸屏的行.(我可以用滚球.)

  • 我知道我可以做一个带外调整大小并保存我的图像,但这不是我想要做的,但是一些示例代码会很好.

一旦我在列表视图上禁用了图像,它再次正常工作.

仅供参考:这就是我的做法:

String[] from = new String[] { DBHelper.KEY_BUSINESSNAME,DBHelper.KEY_ADDRESS,DBHelper.KEY_CITY,DBHelper.KEY_GPSLONG,DBHelper.KEY_GPSLAT,DBHelper.KEY_IMAGEFILENAME  + ""};
int[] to = new int[] {R.id.businessname,R.id.address,R.id.city,R.id.gpslong,R.id.gpslat,R.id.imagefilename };
notes = new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
Run Code Online (Sandbox Code Playgroud)

哪里R.id.imagefilenameButtonImage.

这是我的LogCat:

01-25 05:05:49.877: ERROR/dalvikvm-heap(3896): 6291456-byte external allocation too large for this process.
01-25 05:05:49.877: ERROR/(3896): VM wont let us allocate 6291456 bytes
01-25 05:05:49.877: ERROR/AndroidRuntime(3896): Uncaught handler: thread main exiting due to …
Run Code Online (Sandbox Code Playgroud)

android image bitmap out-of-memory android-bitmap

1252
推荐指数
33
解决办法
60万
查看次数

Android裁剪中心位图

我有正方形或矩形的位图.我采取最短的一面,做这样的事情:

int value = 0;
if (bitmap.getHeight() <= bitmap.getWidth()) {
    value = bitmap.getHeight();
} else {
    value = bitmap.getWidth();
}

Bitmap finalBitmap = null;
finalBitmap = Bitmap.createBitmap(bitmap, 0, 0, value, value);
Run Code Online (Sandbox Code Playgroud)

然后我使用它将它缩放到144 x 144位图:

Bitmap lastBitmap = null;
lastBitmap = Bitmap.createScaledBitmap(finalBitmap, 144, 144, true);
Run Code Online (Sandbox Code Playgroud)

问题是它裁剪原始位图的左上角,任何人都有代码来裁剪位图的中心?

android crop bitmap

141
推荐指数
6
解决办法
10万
查看次数

如何在Android中解决java.lang.OutOfMemoryError问题

尽管我在drawable文件夹中有一个非常小的图像,我从用户那里得到了这个错误.我没有在代码中使用任何位图功能.至少故意:)

java.lang.OutOfMemoryError
    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:683)
    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:513)
    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:889)
    at android.content.res.Resources.loadDrawable(Resources.java:3436)
    at android.content.res.Resources.getDrawable(Resources.java:1909)
    at android.view.View.setBackgroundResource(View.java:16251)
    at com.autkusoytas.bilbakalim.SoruEkrani.cevapSecimi(SoruEkrani.java:666)
    at com.autkusoytas.bilbakalim.SoruEkrani$9$1.run(SoruEkrani.java:862)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5602)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
    at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

根据这个stackTrace,我在这一行得到了这个错误('tv'是一个textView):

tv.setBackgroundResource(R.drawable.yanlis);
Run Code Online (Sandbox Code Playgroud)

问题是什么?如果您需要有关代码的其他信息,我可以添加它.谢谢!

android bitmap out-of-memory setbackground bitmapfactory

65
推荐指数
4
解决办法
11万
查看次数

Android如何使用BitmapFactory选项缩放图像

我想用BitmapFactory.decodeFile(路径,选项)解码SD卡中的图像.
我还希望将大于2048x2048像素的图像缩小到最多2048x2048(保持比例).
我可以在获取位图后手动执行此操作,但除了已分配的字节之外,还需要分配大量字节.
我应该如何设置我的BitmapFactory.Options对象以获得该效果?
谢谢

android decode bitmap decoding bitmapfactory

18
推荐指数
2
解决办法
4万
查看次数

在Android中仅加载部分位图文件

我想将一个位图图像的裁剪版本加载到Bitmap对象中,而不加载原始位图.

如果不编写自定义加载例程来处理原始数据,这是否可行?

谢谢,桑德尔

graphics performance android

16
推荐指数
2
解决办法
6860
查看次数

防止位图太大而无法上传到纹理android

我需要以图库形式全屏显示原始图像.对于拇指,它将完美地工作,当我尝试使用原始源以全屏显示该图像时,它将无法显示.在大多数情况下,如果图像分辨率大于2000,那么它将显示错误位图太大而无法上传到纹理android.

我想阻止这一点,我搜索谷歌但没有得到任何答案.

android android-bitmap

15
推荐指数
3
解决办法
3万
查看次数

在缩放加载之前,从实际Uri预先猜测Bitmap的大小

如果你有一个Uri并且你需要它Bitmap,理论上你可以做到这一点

Bitmap troublinglyLargeBmp =
  MediaStore.Images.Media.getBitmap(
      State.mainActivity.getContentResolver(), theUri );
Run Code Online (Sandbox Code Playgroud)

但它每次都会崩溃,

所以你这样做.........

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;

AssetFileDescriptor fileDescriptor =null;
fileDescriptor =
  State.mainActivity.getContentResolver().openAssetFileDescriptor( theUri, "r");

Bitmap actuallyUsableBitmap
  = BitmapFactory.decodeFileDescriptor(
    fileDescriptor.getFileDescriptor(), null, options);

Utils.Log("'4-sample' method bitmap ... "
   +actuallyUsableBitmap.getWidth() +" "
   +actuallyUsableBitmap.getHeight() );
Run Code Online (Sandbox Code Playgroud)

太棒了,是工作的解决方案.

请注意,在当前条件下(2014年),典型的相机尺寸等,"四"因子往往效果很好.但是,最好在Uri猜测或准确了解图像数据的大小,然后使用它信息,智能地选择那个因素.

简而言之,如何在加载Uri时正确选择该比例因子

Android专家,这是一个众所周知的问题,有没有解决方案?感谢您的iOS-> Android好友!:)

android android-camera bitmapfactory

14
推荐指数
1
解决办法
5994
查看次数

相机通过意图返回的位图大小?

如何从相机获取具有特定(内存友好)大小的位图?

我正在开始一个相机意图:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
cameraIntent.putExtra("return-data", true);

photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "mytmpimg.jpg"));
cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri);        

startActivityForResult(cameraIntent, REQUEST_CODE_CAMERA);
Run Code Online (Sandbox Code Playgroud)

我在这里处理结果:

//  Bitmap photo = (Bitmap) intent.getExtras().get("data");

Bitmap photo = getBitmap(photoUri);
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用注释行 - 直接获取位图,我总是得到一个160 x 120位图,而且这个位图太小了.如果我使用我发现的一些标准内容(方法getBitmap)从URI加载它,它会加载一个2560 x 1920位图(!)并消耗近20 MB的内存.

如何加载让我们说480 x 800(相机预览显示的尺寸相同)?

无需将2560 x 1920加载到内存中并缩小.

memory camera android bitmap

13
推荐指数
1
解决办法
4075
查看次数

Android:获取原始图像的Uri,获取SD卡上的图像缩略图

所以我得到了用户从SD卡中选择的图像的Uri图像.而且我想显示该图像的缩略图,因为很明显,图像可能很大并占据整个屏幕.谁知道怎么样?

android uri image thumbnails

11
推荐指数
2
解决办法
5万
查看次数

如何在不首先读取整个图像的情况下就地缩放流式位图?

我有一个非常图片密集的Android应用程序.我目前正在使用Bitmap.createScaledBitmap()将图像缩放到所需的大小.但是,这种方法要求我已经在内存中有原始位图,这可能非常大.

如何在不首先将整个内容写入本地内存或文件系统的情况下缩放我正在下载的位图?

streaming android bitmap scale

11
推荐指数
1
解决办法
7110
查看次数