Articles of 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它们?

位图分配,使用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:位图分配video中显示的副本。 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 = true; […]

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(path,选项)从SD卡解码图像。 我还希望大于2048×2048像素的图像缩小到最大2048×2048(保持比例)。 我可以在获取位图后手动执行此操作,但除了已经分配的字节外,还需要分配大量的字节。 我应该如何设置我的BitmapFactory.Options对象来获得该效果? 谢谢