我知道,很多人已经说过,写过,发出来了;)但我的问题有点不同。我意识到在Android中使用大型位图对象存在问题。在我的Android应用程序中,我需要在各个地方使用大型位图。无法帮助它。我尝试了stackoverflow中列出的各种东西。我想尝试但不能的是避免使用ARBG_8888。应用程序多次在该行崩溃。我有一个ImageView,我加载一个初始的大位图。然后用户可以在位图中做出一些标记,然后我需要保存整个图像(即原始位图+用户的标记)。我尝试使用stackoverflow得到的代码:
public static Bitmap loadBitmapFromView(Context context, View view) {
Log.d(logtag, "loadBitmapFromView");
Bitmap bitmap;
BitmapFactory.Options options = new BitmapFactory.Options();
// These help in saving/recycling the bitmap memory
options.inPurgeable = true;
options.inInputShareable = true;
Bitmap dummy = null;
try {
dummy = BitmapFactory.decodeStream(context.getAssets().open("icon_add.png"), new Rect(-1,-1,-1,-1), options);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bitmap = Bitmap.createBitmap(view.getLayoutParams().width,
view.getLayoutParams().height, Bitmap.Config.ARGB_8888);
// bitmap = Bitmap.createScaledBitmap( dummy, view.getLayoutParams().width,
// view.getLayoutParams().height, false);
Canvas c = new Canvas(bitmap);
view.layout(0, 0, view.getLayoutParams().width, view.getLayoutParams().height);
view.draw(c);
Log.d(logtag, "loadBitmapFromView: width:" + view.getLayoutParams().width);
c = null;
return bitmap;
}
如何避免在上面的代码中使用ARGB_8888?有人可以帮忙吗? 我从代码中的许多其他地方删除了它,但是,在上面的代码片段中,我是徒劳的。
我尝试使用一个初始虚拟对象(你可以在上面的代码中看到对象'dummy')来创建一个缩放的位图对象(使用createScaledBitmap(),它必须要求一个源位图),然后尝试加载画布,但生成的图像只有虚拟对象(icon_add.png),而不是imageview中的虚拟对象。
答案 0 :(得分:0)
您可以在设备特定的高度宽度中显示图像....然后您不会因为图像大小而内存不足。 这是代码:
@SuppressLint("NewApi")
public static int getDeviceWidth(Activity activity) {
int deviceWidth = 0;
Point size = new Point();
WindowManager windowManager = activity.getWindowManager();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
windowManager.getDefaultDisplay().getSize(size);
deviceWidth = size.x;
} else {
Display display = windowManager.getDefaultDisplay();
deviceWidth = display.getWidth();
}
return deviceWidth;
}
@SuppressLint("NewApi")
public static int getDeviceHeight(Activity activity) {
int deviceHeight = 0;
Point size = new Point();
WindowManager windowManager = activity.getWindowManager();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
windowManager.getDefaultDisplay().getSize(size);
deviceHeight = size.y;
} else {
Display display = windowManager.getDefaultDisplay();
deviceHeight = display.getHeight();
}
return deviceHeight;
}
您可以使用设备高度和宽度..并在imageview中设置此图片..
ImageView image = new ImageView(viewHomeScreen);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.FILL_PARENT,
FrameLayout.LayoutParams.FILL_PARENT);
params.height = getDeviceHeight(activity);
params.width = getDevicewidth(activity);
FrameLayout framelayout = new FrameLayout(viewHomeScreen);
framelayout.addView(image, 0, params);
我希望如果您使用设备特定的高度和宽度,那么您的图像内存问题将得到解决。