Articles of bitmapfactory

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

如果你有一个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() ); 这太棒了 ,是工作的解决方案。 请注意,在当前条件下(2014年),典型的相机尺寸等,“四”因子往往效果很好。但是,最好在Uri上猜测或准确了解图像数据的大小 ,然后使用它信息, 智能地选择那个因素 。 简而言之, 如何在加载Uri时正确选择该比例因子 ? Android专家,这是一个众所周知的问题,有没有解决方案? 感谢您的iOS-> […]

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到6 Mb) 我错过了什么? 这是减小图像大小的最佳方法吗? 谢谢

Android:decodeFile始终为内部存储中的文件返回null

我有一个文件本地保存到应用程序的私有存储中。 我已经validation它存在,但每当我调用BitmapFactory.decodeFile时,它总是返回null。 如果我将文件保存为资源并使用ImageView setImageResource,它总是显示正常。 问题是什么? 这是片段: filename = “test.png”; if (doesFileExist(filename)) Bitmap bMap = BitmapFactory.decodeFile(filename); 我也尝试过: Bitmap bMap = BitmapFactory.decodeFile(getFilesDir().getPath() + filename);

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

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

使用BitmapFactory.Options.inBitmap进行位图分配会抛出IllegalArgumentException

我得到了下一个exception:当将inBitmap设置为true时, 解码到现有位图时出现问题 ; 引起:java.lang.IllegalArgumentException:解码到现有位图时出现问题 在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:460) … 有趣的是,运行时相同的代码在不同的地方失败: API:4.4.2,Nexus 4 API:4.3.1,三星s3 这是我的代码,它是这个DevBytes:Bitmap Allocationvideo中显示的副本。 private BitmapFactory.Options options; private Bitmap reusedBitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView imageView = (ImageView) findViewById(R.id.image_view); // set the size to option, the images we will load by using this option options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; options.inMutable […]

最佳使用BitmapFactory.Options.inSampleSize来提高速度

感谢Schermvlieger在anddev.org上提出这个问题, 我只是将他的问题复制到SO,因为没有人在其他网站上回复,我也面临同样的问题。 我想知道BitmapFactory.Options.inSampleSize在显示图像的速度方面会有什么最佳用途。 文档提到使用2的幂的值,所以我正在使用2,4,8,16等。 我想知道的是: 我应该重新采样到仍然大于屏幕分辨率的最小尺寸,还是应该采样到足以避免OutOfMemoryError的尺寸? 如何在不耗尽内存的情况下计算仍可显示的图像的最大尺寸? 图像的颜色深度是否也起作用,显示的深度是什么? 通过两种机制显示图像是否有效(大文件的BitmapFactory ,较小的文件的setImageURI() )我顺便使用ImageSwitcher 。 它是否有助于在应用程序开始时创建Bitmap , BitmapFactory.Options和inTempStorage ,或者只在需要时动态创建它们?

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,我没有丝毫的线索如何使用。 如果我以错误的方式讨论这个问题,请告诉我,指导我采取正确的方法来做我想做的事情。