标签: bitmap

在Android上将大型位图文件的大小调整为缩放输出文件

我在一个文件中有一个大位图(比如3888x2592).现在,我想将该位图的大小调整为800x533并将其保存到另一个文件中.我通常会通过调用Bitmap.createBitmap方法来缩放位图,但它需要一个源位图作为第一个参数,我无法提供,因为将原始图像加载到Bitmap对象当然会超出内存(例如,请参见此处).

我也无法读取位图,例如,BitmapFactory.decodeFile(file, options)提供a BitmapFactory.Options.inSampleSize,因为我想将其调整为精确的宽度和高度.使用inSampleSize会将位图的大小调整为972x648(如果我使用inSampleSize=4)或778x518(如果我使用inSampleSize=5,它甚至不是2的幂).

我还想避免使用inSampleSize在第一步中使用例如972x648读取图像,然后在第二步中将其大小调整为800x533,因为与直接调整原始图像大小相比,质量会很差.

总结我的问题:是否有办法读取10MP或更高的大图像文件并将其保存到新的图像文件,调整大小到特定的新宽度和高度,而不会得到OutOfMemory异常?

我也尝试BitmapFactory.decodeFile(file, options)手动将Options.outHeight和Options.outWidth值设置为800和533,但它不起作用.

android resize image bitmap

214
推荐指数
8
解决办法
22万
查看次数

将可绘制资源图像转换为位图

我试图使用Notification.Builder.setLargeIcon(bitmap)带有位图图像.我有我想在可绘制文件夹中使用的图像,那么如何将其转换为位图?

android bitmap

168
推荐指数
5
解决办法
21万
查看次数

java.lang.OutOfMemoryError:位图大小超过VM预算 - Android

我开发了一个在Android上使用大量图像的应用程序.

该应用程序运行一次,填满屏幕上的信息(Layouts,Listviews,Textviews,ImageViews,等)和用户读取的信息.

没有动画,没有特效或任何可以填充内存的东西.有时候抽屉可以改变.有些是android资源,有些是保存在SDCARD文件夹中的文件.

然后用户退出(该onDestroy方法被执行并且app由VM保持在内存中)然后在某个时刻用户再次进入.

每次用户进入应用程序时,我都可以看到内存越来越多,直到用户获得java.lang.OutOfMemoryError.

那么处理许多图像的最佳/正确方法是什么?

我应该把它们放在静态方法中,这样它们就不会一直装载吗?我是否必须以特殊方式清洁布局或布局中使用的图像?

memory android memory-leaks bitmap out-of-memory

157
推荐指数
7
解决办法
11万
查看次数

Android:以一定角度在imageview中旋转图像

我使用以下代码在ImageView中旋转图像一个角度.有没有更简单,更简单的方法可用.

ImageView iv = (ImageView)findViewById(imageviewid);
TextView tv = (TextView)findViewById(txtViewsid);
Matrix mat = new Matrix();
Bitmap bMap = BitmapFactory.decodeResource(getResources(),imageid);
mat.postRotate(Integer.parseInt(degree));===>angle to be rotated
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,bMap.getWidth(),bMap.getHeight(), mat, true);
iv.setImageBitmap(bMapRotate);
Run Code Online (Sandbox Code Playgroud)

android bitmap rotation imageview

147
推荐指数
9
解决办法
28万
查看次数

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万
查看次数

如何将Bitmap对象从一个活动传递到另一个活动

在我的活动中,我创建了一个Bitmap对象,然后我需要启动另一个Activity,如何Bitmap从子活动(将要启动的那个)传递这个对象?

java android bitmap parcelable

138
推荐指数
5
解决办法
12万
查看次数

Android:从图库加载的位图在ImageView中旋转

当我将媒体库中的图像加载到位图时,一切都运行正常,除了在垂直拿着手机时用相机拍摄的图片被旋转,以便我总是得到水平图片,即使它在画廊.为什么这样,我怎么能正确加载它?

android bitmap rotation gallery

132
推荐指数
8
解决办法
11万
查看次数

将视图转换为位图而不在Android中显示它?

我将尝试解释我到底需要做什么.

我有3个独立的屏幕,分别是A,B,C.还有另一个名为HomeScreen的屏幕,其中所有3个屏幕位图都应显示在图库视图中,用户可以选择他想去哪个视图.

通过将所有代码仅放在HomeScreen Activity中,我已经能够获得所有3个屏幕的位图并将其显示在Gallery视图中.现在,这使代码变得很复杂,我想简化它.

那么,我可以从HomeScreen调用另一个Activity并且不显示它,只是获取该屏幕的Bitmap.例如,假设我只调用HomeScreen,它调用活动A,B,C,并且不会显示A,B,C中的任何活动.它只是通过getDrawingCache()给出该屏幕的Bitmap.然后我们可以在HomeScreen的Gallery视图中显示这些位图.

我希望我已经非常清楚地解释了这个问题.

如果这确实可行,请告诉我.

android bitmap

123
推荐指数
6
解决办法
9万
查看次数

对于具有数百万像素的2D无盒装像素阵列,建议使用什么Haskell表示?

我想解决Haskell中的一些图像处理问题.我正在使用数百万像素的双色调(位图)和彩色图像.我有很多问题:

  1. 我应该在什么基础上选择Vector.UnboxedUArray?它们都是未装箱的阵列,但Vector抽象似乎大量宣传,尤其是循环融合.是Vector总是更好?如果没有,我何时应该使用哪种表示?

  2. 对于彩色图像,我希望存储16位整数的三元组或单精度浮点数的三元组.为此目的,是Vector或者UArray更容易使用?性能更高?

  3. 对于双色调图像,我需要每像素仅存储1位.是否有预定义的数据类型可以通过将多个像素打包成一个单词来帮助我,或者我是靠自己?

  4. 最后,我的数组是二维的.我想我可以处理由表示强加的额外间接作为"数组数组"(或向量向量),但我更喜欢具有索引映射支持的抽象.任何人都可以从标准库或Hackage推荐任何东西吗?

我是一名功能程序员,不需要变异:-)

arrays haskell bitmap image-processing

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

Android Bitmap到Base64字符串

如何将大型位图(使用手机相机拍摄的照片)转换为Base64字符串?

base64 android bitmap android-bitmap

117
推荐指数
6
解决办法
9万
查看次数