【问题标题】:Resize Bitmap in Android在 Android 中调整位图大小
【发布时间】:2011-08-25 02:23:40
【问题描述】:

我使用以下代码调整位图的大小:

FileOutputStream out = new FileOutputStream("/sdcard/mods.png");
Bitmap bmp = Bitmap.createScaledBitmap(pict, (int)(pict.getWidth() / totScale),  
    (int)(pict.getHeight() / totScale), false);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();

从我正在使用的相机中获取位图的代码如下:

mCamera.takePicture(null, null, null, new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            pict = BitmapFactory.decodeByteArray(data, 0, data.length);
        }
});

第一张图片是我在手机上看到的(在 Astro 文件管理器中),也是当我在画布上的应用程序中绘制位图时看到的。这发生在我测试过的每台设备上(HTC Legend 和 Galaxy Tab) 第二张图片是它在我电脑上的样子。是什么导致设备上的阻塞?


解决方案:

以下是解决我的问题的方法: 而不是

pict = BitmapFactory.decodeByteArray(data, 0, data.length);

我把它换成了

BitmapFactory.Options opts = new BitmapFactory.Options();               
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
pict = BitmapFactory.decodeByteArray(data, 0, data.length, opts);

【问题讨论】:

  • 你们中最喜欢花时间发布确切解决方案的人(upvote)。

标签: android bitmap camera


【解决方案1】:

1) 尝试在调用 createScaledBitmap() 时将过滤器参数从“false”更改为“true”。我打赌这会解决你的问题。

您应该阅读这篇文章:http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering/

【讨论】:

  • 将其更改为 true 会有所帮助。我读了这篇文章,但是如何确保我的窗口和位图都是 32 位,并且都是 ARGB_8888?
  • @AmandeepGrewal 如果我理解正确,您包含的代码工作正常:您正在拍摄照片,然后创建一个在您的计算机上看起来不错的 png 文件。 “问题”在于您未向我们展示的代码:您稍后用于读取和显示照片的代码。 1)请向我们展示该代码。 2)你可以让任何Android应用程序很好地显示png文件吗?画廊怎么样? 3) 在回答您的问题时,请始终将 BitmapFactory 与允许您指定 BitmapFactory 选项的方法一起使用,并始终确保将 ARGB_8888 显式用于 inPreferredConfig。
  • 好吧,我认为该代码无关紧要,因为我尝试过的任何 Android 应用程序(包括图库)都显示了如图所示的块。但是,如果您认为代码是必要的,那么它就在我的 onDraw 中:canvas.setMatrix(matrix); canvas.drawBitmap(pict, 0, 0, null);
  • P.S. Divers 是对的:png 是无损格式;当您使用 Bitmap.compress 和 Bitmap.CompressFormat.PNG 时,质量参数被忽略,因此指定 90“看起来很草率”,指定 100 会“看起来更好”,这与实际情况相符。详情见这里:developer.android.com/reference/android/graphics/Bitmap.html
  • 谢谢!指定 ARGB_888 有效!图像现在没有任何块!
【解决方案2】:

第一张和第二张图是一样的。

附言

bmp.compress(Bitmap.CompressFormat.PNG, 90, out);

您不能压缩 PNG 格式,只能压缩 JPEG。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2011-06-17
    • 2017-12-20
    • 2012-03-23
    相关资源
    最近更新 更多