Android 缩放后的图像显示某种类型的平铺

Android 缩放后的图像显示某种类型的平铺,android,image,scale,Android,Image,Scale,在我的应用程序中,我将图像动态缩放到原始大小的50%。当缩放时,它会显示某种类型的平铺(如下图所示)。图像的方形部分比相邻的瓷砖颜色相同的部分更亮。它几乎不引人注意,但对我的应用程序来说,这还不够好。正方形的大小取决于比例因子。因此,在75%的因素大小瓷砖更小 例如: 我的图形代码(在自定义视图的onDraw中调用): 有人知道如何防止这种平铺吗?您是在设备上还是在模拟器上看到的?因为在一台设备上,一些低质量的GPU可能会引入一种“抖动”效果,而缺少GPU或模拟器的设备不会产生这种效果 解决方

在我的应用程序中,我将图像动态缩放到原始大小的50%。当缩放时,它会显示某种类型的平铺(如下图所示)。图像的方形部分比相邻的瓷砖颜色相同的部分更亮。它几乎不引人注意,但对我的应用程序来说,这还不够好。正方形的大小取决于比例因子。因此,在75%的因素大小瓷砖更小

例如:

我的图形代码(在自定义视图的onDraw中调用):


有人知道如何防止这种平铺吗?

您是在设备上还是在模拟器上看到的?因为在一台设备上,一些低质量的GPU可能会引入一种“抖动”效果,而缺少GPU或模拟器的设备不会产生这种效果


解决方案是在Photoshop中或使用位图API预缩放图像。

您是否尝试过
canvas.drawBitmap(位图,m,new Paint(Paint.FILTER\u Bitmap\u FLAG))

您可以尝试使用
Bitmap.createScaledBitmap()预缩放位图
而不是在移动中缩放它,看看这是否有帮助。你试过
canvas.drawBitmap(位图,m,new Paint(Paint.FILTER\u bitmap\u FLAG))
如所示@Jave:因为图像是在其原始大小的100%到50%之间动态缩放的,所以预缩放对我来说毫无用处。@fab:这有点帮助。现在您看不到瓷砖之间的清晰边界,但图像看起来仍然有点抖动。不过,它将绘图时间增加了一倍(从6毫秒增加到13毫秒)。您可以尝试使用多个不同大小的图像,这样您就不必缩放太多,即一个为50%,一个为100%,如果您有足够的内存,也可能是一个为75%。另外,试着放大而不是缩小,因为这些人工制品是由缩小尺寸引起的。我正在使用Acer A500平板电脑。由于图像是在其原始大小的100%到50%之间动态缩放的,所以预缩放对我来说是无用的。
private void drawImage(Bitmap bitmap, float scaling,
        Canvas canvas, float offset)
{

    Matrix p = new Matrix();
    Matrix m = new Matrix();
    Matrix y = new Matrix();
    Matrix o = new Matrix();

    p.setTranslate(-bitmap.getWidth() / 2, -bitmap.getHeight() / 2);

    // translation to views center (minus half height of image
    // so that the bottom of the picture is in the views center.
    y.setTranslate(getWidth() / 2, getHeight() / 2);
    // offset translation.
    o.setTranslate(offset, 0);

    m.setScale(scaling, scaling);
    m.preConcat(p);
    m.postConcat(y);
    m.postConcat(o);

    // draw image
    canvas.drawBitmap(bitmap, m, null);
}