如何在Android中调整Bitmaps的最佳方式?

Ada*_*old 4 java graphics android

假设我有一个六边形:

六边形

如果我调整大小以在我的应用程序中使用它,其中包含六边形网格:

// ...
bgPaint = new Paint();
bgPaint.setAntiAlias(true);
bgPaint.setDither(true);

// ...
Bitmap coloredBackground = BitmapFactory.decodeResource(getResources(), R.drawable.bg);

// ...
canvas.drawBitmap(coloredBackground, null, getAsRect(), bgPaint);
Run Code Online (Sandbox Code Playgroud)

我明白了:

六角形

getAsRect()返回Rect我用于绘图的对象.我想要实现的是摆脱边缘处的透明像素.我想我做错了什么但到目前为止我找不到.你知道我怎么能解决这个问题?

我试着尝试抖动和抗锯齿,但没有改变.

Gun*_*son 7

3意见建议:

1

试试这个:通过将BitmapFactory.Options.inScaled设置为false来解码资源时关闭系统的缩放:

Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap source = BitmapFactory.decodeResource(context.getResources(), R.drawable.bg, options);
Run Code Online (Sandbox Code Playgroud)

inScaled如果需要非缩放版本的位图,则应关闭该标志.

然后使用缩放比例图Bitmap.createScaledBitmap(...).

2

另一个可能的原因是你的瓷砖的对角黑线包含不同的灰色阴影:

这是你的瓷砖的特写:

在此输入图像描述

它在重新调整大小之前就已经消除了别名.任何不完全黑色的像素都可能在调整大小的线条中显示为较浅的颜色.您可以将线条线更改为完全黑色(0xFF000000)并仅在调整大小后执行消除锯齿.

3

此问题的另一个解决方案是设计您的瓷砖,如下所示:

在此输入图像描述

这避免了彼此相邻绘制两条抗锯齿对角线的问题.