如何以高质量缩放图像并将其绘制到画布

时间:2016-01-25 09:49:33

标签: android android-canvas android-bitmap

我在应用的资源中有一个PNG图像,它有950 * 291像素,放在drawable-mdpi目录中。我想创建一个内存中的Bitmap,我希望将其缩小(实际上是100像素高)。我尝试了很多方法,但看起来像素化了。

我尝试了以下内容:

  1. 将其加载为BitmapDrawable,启用AntiAliasFilterBitmap并将其称为draw方法。
  2. 使用BitmapFactory.decodeResource加载opts.inScaled并将Matrix设置为fales并使用Bitmap.createScaledBitmap绘制到画布。
  3. 与上一个相同,但首先使用Paint.setFilterBitmap将其缩小,然后绘制到没有矩阵的画布。
  4. 都没有奏效。这是我得到的图像,它不是平滑的,是像素化的:

    Scaled down on Android with filterBitmap=true

    似乎// create in-memory bitmap Bitmap bitmap = Bitmap.createBitmap(1000, 1100, Bitmap.Config.RGB_565); bitmap.setDensity(Bitmap.DENSITY_NONE); Canvas canvas = new Canvas(bitmap); Paint paint = new Paint(); paint.setFilterBitmap(true); paint.setAntiAlias(true); // load the original image BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inScaled = false; opts.inPreferredConfig = Bitmap.Config.RGB_565; Bitmap logoBitmap = BitmapFactory.decodeResource(resources, R.drawable.main_logo, opts); logoBitmap.setDensity(Bitmap.DENSITY_NONE); // scale it down and draw it Bitmap scaledLogo = Bitmap.createScaledBitmap(logoBitmap, logoWidth, logoHeight, false); canvas.drawBitmap(scaledLogo, x, y, paint); 确实有一些影响,因为如果没有它,它甚至会更糟糕:

    Scaled down on Android with filterBitmap=false

    这是使用相同原始图像的任何图像编辑器的缩小版本,这样更顺畅。

    Scaled down with image editor

    我无法使用Android扩展更高质量的图像吗?图像清晰地突出了图像中的其他抗锯齿文本。

    这是我目前的代码:

    <?php
        include "products.php";
    
        foreach($products as $key=>$val)
        {
            echo '<div style="float:right;text-align:center;margin:20px;">';
            echo '<IMG src="img/'.$val['category'].'/'.$val['image'].'" WIDTH="94" HEIGHT="94" BORDER="0" ALT=""><br />';
            echo $val['name'].'<br />';
            echo '₪ '.$val['price'].'<br />';
            echo '<a onmousedown="parent.AddItemToCart('.$val['id'].','.$val['name'].'','img/'.$val['category'].'/'.$val['image'].','.$val['price'].')"></a><br/>';
            echo '</div>';
        }
    ?>
    

    在Android 5.0上测试过。我通过向资源添加缩放版本来解决它,但想知道出了什么问题。

0 个答案:

没有答案