Articles of bitmapfactory

MediaStyle LargeIcon的大小

我正在使用新的Notification.MediaStyle类实现一个棒棒糖风格的通知到FTPstream式音乐播放器应用程序。 我将专辑封面设置为我的“大图标”。 鉴于专辑封面是直接从当前正在播放的文件中获取的,该专辑封面的大小因来源而异(可能高达5000×5000)。 从我的前棒棒糖代码我解码位图的最大尺寸定义为: android.R.dimen.notification_large_icon_width 和 android.R.dimen.notification_large_icon_height 这工作得很好,因为解码时间要快得多,而且内存的使用也是理想的 但是,将此代码应用于我的MediaStyle样式时,展开的视图使用比尺寸参数定义的图标大得多的尺寸,从而在展开时导致模糊的专辑图样。 是否有一些常数来定义MediaStyle大图标的展开视图的最大大小? 还是有一些解决这个问题? 就目前而言,以全分辨率对艺术进行解码是不可接受的,因为它可能导致应用程序由于OOM而崩溃。

BitmapFactory.decodeResource和莫名其妙的内存不足

我得到一个奇怪的内存错误解码一个可绘制的图像资源960x926px jpg,分配3555856字节。 该图像只能放置在drawable-xxhdpi(3x)中,而我正在使用hdpi(1.5x)设备。 两个问题: 为什么我在堆中有足够的空闲内存时会出错? ((960/2)x(926/2))x 4 = 888960字节(而不是3555856)分配一个hdpi设备? 有人能解释我吗? 注意:问题是关于为什么获得一个3.5MB的空间分配,而有22.5MB的空闲内存(见日志) 03-18 17:30:15.050 32750-32750 /? D / dalvikvm:GC_FOR_ALLOC释放10809K,49%免费23735K / 46087K,暂停89ms,总计89ms 03-18 17:30:15.050 32750-32750 /? I / dalvikvm-heap:强制收集SoftReferences的3555856字节分配 03-18 17:30:15.160 32750-32750 /? D / dalvikvm:GC_BEFORE_OOM释放29K, 49%免费23705K / 46087K ,暂停103ms,总共103ms 03-18 17:30:15.160 32750-32750 /? E / dalvikvm-heap: 3555856字节分配的内存不足 。 03-18 17:30:15.160 32750-32750 /? I / dalvikvm:“main”prio = […]

BitmapFactory.decodeStream毫无例外地返回null

我尝试从服务器加载远程图像,并感谢在stackoverflow上的很多代码示例我有一个解决scheme,在3个图像中的2个。 我真的不知道第三张图片有什么问题,有时让代码在debugging器中运行时,图片正在加载。 另外如果我加载问题图片首先其他两个图片有时不加载。 这里是代码: public static Drawable getPictureFromURL(Context ctx, String url, final int REQUIRED_SIZE) throws NullPointerException { //Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); int scale = 1; if (o.outWidth > REQUIRED_SIZE) { scale = (int) Math.pow(2, (int) Math.round(Math.log(REQUIRED_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5))); } Log.i(Prototype.TAG, "scale: "+scale); //Decode with inSampleSize BitmapFactory.Options o2 […]

使用gridview从SD卡上的特定文件夹显示图像

我正在尝试创build一个从一个特定的文件夹驻留在SD卡上的图像加载的GridView。 该文件夹的path是已知的(“/ SD卡/图片”),但在网上看到的例子,我不确定如何或在哪里指定图片文件夹的path,我想加载图像。 我已经读了几十个教程,甚至在developer.android.com上的HelloGridView教程,但这些教程并没有教我什么我正在寻找。 到目前为止,我读过的每篇教程都有: A)将图像从/ res文件夹命名为Drawable,并将它们放入要加载的数组中,而不是使用SDCard。 B)使用MediaStore访问SDCard上的所有图片,但未指定如何设置要显示图像的文件夹的path 要么 C)build议使用BitmapFactory,我没有丝毫的线索如何使用。 如果我以错误的方式讨论这个问题,请告诉我,指导我采取正确的方法来做我想做的事情。

Android:PNG透明度与BitmapFactory.decodeStream(…)和资产文件夹失败

我正在使用以下方法从我的Android应用程序的资产文件夹中提取PNG文件: public static Bitmap getBitmapFromAssets(Context context, String fileName) { try { AssetManager assetManager = context.getAssets(); InputStream inputStream = assetManager.open(fileName); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } catch(Exception ex) { ex.printStackTrace(); return null; } } 然后,我在GridView的项目中将ImageView的源设置为该位图。 这里是有问题的布局XML: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/containingLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_horizontal" android:background="@android:color/transparent" android:padding="0dp" android:layout_margin="0dp" > <ImageView android:id="@+id/ivPackageIcon" style="@style/smLargeGridItemPackageIconStyle" /> </LinearLayout> XML中提到的风格是: <style name="smLargeGridItemPackageIconStyle"> […]

android – calculateInSampleSize,为什么Math.round在width> height时处理height(height / reqHeight)?

我正在寻找'developer.android.com'来缩小我的位图文件,我发现有一件事我不明白。 所以我感谢你给我一点帮助。 这是一个来自developer.android.com的片段 public static int calculateInSampleSize( BitmapFactory.Options options, int reqWidth, int reqHeight) { // Raw height and width of image final int height = options.outHeight; final int width = options.outWidth; int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { if (width > height) { inSampleSize = Math.round((float)height / (float)reqHeight); } […]

获取大小的位图Android

可能重复: 位图解码后的字节大小? 无论如何,所以我可以得到这个位图的大小?我试图使用getByteCount(),但我不能使用它? Bitmap bitmap = BitmapFactory.decodeByteArray(decryptedData , 0, decryptedData .length); //decoding bytearrayoutputstream to bitmap 有什么build议么?

bitmap.compress(Bitmap.CompressFormat.PNG,0,fOut)使图像尺寸比原来的大

我想压缩从相机拍摄的图像为PNG格式,使其尺寸更小,所以我使用这个代码: compressedPictureFile = new File(imagePath); Bitmap bitmap = BitmapFactory.decodeFile(imagePath); FileOutputStream fOut = new FileOutputStream(compressedPictureFile); boolean compressed = bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut); fOut.flush(); fOut.close(); 问题是,compressedPictureFile实际上是更大的原始图像(从1 Mb到6Mb) 我错过了什么? 这是减less图像大小的最佳方法吗? 谢谢

在缩放前,从实际的Uri中预先猜测位图的大小

如果你有一个Uri,你需要Bitmap ,你可以理论上这样做 Bitmap troublinglyLargeBmp = MediaStore.Images.Media.getBitmap( State.mainActivity.getContentResolver(), theUri ); 但每次都会崩溃, 所以你这样做……… 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() ); 这是太棒了 ,是工作的解决scheme。 注意在当前条件下(2014年),具有典型的相机尺寸的情况下趋于正常工作的“四”因子等。但是,最好是在URI中准确地猜测或学习图像数据的大小 ,然后使用信息, 智能地select这个因素 。 总之, 如何正确select这个比例因子当你加载一个Uri? Android专家,这是一个众所周知的问题,有没有解决scheme? 感谢你的iOS-> Android的朋友! […]

最佳的使用BitmapFactory.Options.inSampleSize的速度

感谢Schermvlieger在anddev.org上提出这个问题, 我只是把他的问题复制到SO,因为没有人在另一个网站上回答,我也面临同样的问题。 我想知道什么是最佳的使用BitmapFactory.Options.inSampleSize关于显示图像的速度。 文档提到使用2的幂值,所以我正在使用2,4,8,16等。 我想知道的事情是: 我应该重新取样到比屏幕分辨率还要大的最小尺寸,还是应该抽样到足以避免OutOfMemoryError的大小? 如何计算一个图像的最大尺寸,仍然可以显示,而不是内存不足? 图像的颜色深度是否也起作用,以及显示的深度? 通过两种机制显示图像是有效的(大图像文件为BitmapFactory ,小图像为setImageURI() )我使用的是ImageSwitcher 。 它是否有助于在应用程序开始时创buildBitmap , BitmapFactory.Options和inTempStorage ,还是仅在需要时才创build它们?