java - 如何在 Android 中以最佳方式调整位图大小?

标签 java android graphics

假设我有一个六边形:

hexagon

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

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

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

// ...
canvas.drawBitmap(coloredBackground, null, getAsRect(), bgPaint);

我明白了:

Hexagons

getAsRect() 返回我用于绘图的 Rect 对象。我想要实现的是摆脱边缘的那些透明像素。我想我做错了什么,但到目前为止我找不到哪里。您知道我该如何解决这个问题吗?

我尝试使用抖动和抗锯齿进行试验,但没有任何改变。

最佳答案

3条建议:

1

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

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

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

然后使用 Bitmap.createScaledBitmap(...) 缩放位图。

2

另一个可能的原因是您的图 block 的黑色对角线包含不同的灰色阴影:

这是您磁贴的特写:

enter image description here

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

3

此问题的另一种解决方案是像这样设计您的磁贴:

enter image description here

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

关于java - 如何在 Android 中以最佳方式调整位图大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13741072/

相关文章:

java - byte 数组和 ByteBuffer 哪个更快

android - 找到无效的 Gradle JDK 配置

android - 干净架构中的 FCMMessagingService?

html - 停止时 SGV 梯度变暗

java - Java JTree的右键单击上下文菜单?

java - 删除自动生成的 Javadoc 注释 eclipse

android - 如何与自定义媒体播放器一起显示搜索栏

c# - Graphics.DrawIcon 忽略比例变换?

graphics - 如何使用 ImageMagick 将图标连接成单个图像?

java - 使用 ant 处理自定义属性