Articles of bitmapfactory

BitmapFactory意外地下采样图像

在我的Android应用程序中,我上传并下载JPEG图像。 对于某些图像, BitmapFactory对下载的图像进行下采样,我不明白为什么以及如何阻止它这样做。 我上传和下载图像时记录Bitmap对象大小: Uploading image with size 3840×2160 Opening received image of size 2601584B degradation 0 decoded 384×216 因此,在使用BitmapFactory解码后,我的图像宽度和高度除以10。 对于另一个图像,我从3480×4640转到217×290,因此除以16。我首先想到它可能是由图像dpi元数据引起的,所以我尝试使用以下代码打开图像时强制它: BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 1 << degradation; opts.inScaled = false; opts.inDensity = 1; opts.inTargetDensity = 1; opts.inScreenDensity = 1; final Bitmap original = BitmapFactory.decodeByteArray(data, 0, data.length, opts); Log.d(Tags.IMAGES, "Opening received image […]

如何使用BitmapFactory.decode *()指定位图格式(例如RGBA_8888)?

我正在对BitmapFactory.decodeFile()和BitmapFactory.decodeResource()进行多次调用,我想指定位图被解码的格式,例如RGB_565或RGBA_8888。 目前,解码的位图格式似乎取决于输入图像。 或者,有没有办法将现有位图转换为特定格式? 这很重要的原因是,当我尝试使用jnigraphics解码图像时,一些图像返回types为ANDROID_BITMAP_FORMAT_NONE的AndroidBitmapFormat ,我认为这是无用的。 有没有人更深入地了解为什么格式不是已知值? 发生这种情况时,内置图像选择器会正确显示以这种方式解码的图像,因此我认为必须有一种方法来处理它们。 感谢您的输入!

如何在Android编码中的ImageView上编写文本?

嗨,我一直在尝试在Imageview上编写Numbers。 N个问题的图像。 如果用户输入的答案是正确的,那么它应该显示带有刻度标记图像的问题编号,否则带有错误标记图像的问题编号。 我需要在图像上写下问号。 我的代码在这里: LinearLayout l_layout = (LinearLayout) findViewById(R.id.linear_view_report); LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f); ImageView[] imgview=new ImageView[questions.length]; for(int i=0;i<no_of_questions;i++) { if(userEnteredAnswers[i]==correct_answer[i]){ Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.correct); Canvas canvas = new Canvas(bm); Paint paint = new Paint(); paint.setColor(Color.BLACK); paint.setTextSize(10); canvas.drawText(i, 5, 5, paint); imgview[i]=new ImageView(this); imgview[i].setImageDrawable(new BitmapDrawable(bm)); l_layout.addView(imgview[i]); } else { Bitmap bm=BitmapFactory.decodeResource(getResources(),R.drawable.wrong); Canvas canvas = […]

Android:我应该使用哪种图像格式?为什么?

我是一个初学者程序员,我的问题是:我的Android应用程序将使用哪种图像格式? Descripton:我只使用插图,因此图像主要是背景图像和一些按钮,我想知道哪种方法最好。 我目前的图像进展是下一个:我使用.png文件格式。 我不知道我应该使用什么分辨率,现在我使用300×400 px图像aproximetly。 这是我使用图像的代码: Bitmap bMap = BitmapFactory.decodeResource(getResources(), MyArray[index].getArtiD()); MyImageView.setImageBitmap(bMap); 所以这就是我在Android中使用图像的方式,如果有人知道问题,提示或“必须知道的信息”,请告诉我们这样做。 我真的不明白为什么我应该使用这个位图工厂或为什么我应该使用png格式。 我想以最好的方式做到这一点,我在Android文档中看不到很多东西。 谢谢,亚当

经常切换ImageView位图时,BitmapFactory.Options.inBitmap会导致撕裂

我遇到过一种情况,我必须以幻灯片forms显示图像,以便快速切换图像。 大量的图像使我想要将JPEG数据存储在内存中,并在我想要显示它们时解码它们。 为了简化垃圾收集器,我使用BitmapFactory.Options.inBitmap来重用位图。 不幸的是,这导致相当严重的撕裂,我尝试了不同的解决方案,如同步,信号量,2-3个位图之间的交替,但是,似乎没有解决问题。 我已经建立了一个示例项目,在GitHub上演示了这个问题; https://github.com/Berglund/android-tearing-example 我有一个线程解码位图,在UI线程上设置它,并睡眠5毫秒: Runnable runnable = new Runnable() { @Override public void run() { while(true) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 1; if(bitmap != null) { options.inBitmap = bitmap; } bitmap = BitmapFactory.decodeResource(getResources(), images.get(position), options); runOnUiThread(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); try { Thread.sleep(5); […]

使用Bitmap.Config.RGB_565将内存中的位图转换为位图

我有一个加载的位图,我想转换为将配置设置为Bitmap.Config.RGB_565 。 在Bitmap已经加载到内存后,是否有一种简单的方法将Bitmap转换为此配置? 例如,下面我有一个从应用程序资源解码的位图,但是,如何将已经加载的Bitmap转换为RGB_565 ? 我确信它很简单,但是,我对使用Bitmaps很新,经过几个小时的在线查看,遗憾的是我无法find我需要的东西。 BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig=Bitmap.Config.RGB_565 bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.myphoto ,options);

在缩放加载之前,从实际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对象以获得该效果? 谢谢