我在应用的资源中有一个PNG图像,它有950 * 291像素,放在drawable-mdpi
目录中。我想创建一个内存中的Bitmap
,我希望将其缩小(实际上是100像素高)。我尝试了很多方法,但看起来像素化了。
我尝试了以下内容:
BitmapDrawable
,启用AntiAlias
和FilterBitmap
并将其称为draw
方法。BitmapFactory.decodeResource
加载opts.inScaled
并将Matrix
设置为fales并使用Bitmap.createScaledBitmap
绘制到画布。Paint.setFilterBitmap
将其缩小,然后绘制到没有矩阵的画布。都没有奏效。这是我得到的图像,它不是平滑的,是像素化的:
似乎// 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);
确实有一些影响,因为如果没有它,它甚至会更糟糕:
这是使用相同原始图像的任何图像编辑器的缩小版本,这样更顺畅。
我无法使用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上测试过。我通过向资源添加缩放版本来解决它,但想知道出了什么问题。