gpt4 book ai didi

android - 用透明度替换位图中的特定颜色

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:36 25 4
gpt4 key购买 nike

我有一种方法可以用透明度替换一种颜色的像素

public Bitmap createTransparentBitmapFromBitmap(Bitmap bitmap,
int replaceThisColor) {
if (bitmap != null) {
int picw = bitmap.getWidth();
int pich = bitmap.getHeight();
int[] pix = new int[picw * pich];
bitmap.getPixels(pix, 0, picw, 0, 0, picw, pich);

int sr = (replaceThisColor >> 16) & 0xff;
int sg = (replaceThisColor >> 8) & 0xff;
int sb = replaceThisColor & 0xff;

for (int y = 0; y < pich; y++) {
for (int x = 0; x < picw; x++) {
int index = y * picw + x;
/* int r = (pix[index] >> 16) & 0xff;
int g = (pix[index] >> 8) & 0xff;
int b = pix[index] & 0xff;*/

if (pix[index] == replaceThisColor) {

if(x<topLeftHole.x) topLeftHole.x = x;
if(y<topLeftHole.y) topLeftHole.y = y;
if(x>bottomRightHole.x) bottomRightHole.x = x;
if(y>bottomRightHole.y)bottomRightHole.y = y;

pix[index] = Color.TRANSPARENT;
} else {
//break;
}
}
}

Bitmap bm = Bitmap.createBitmap(pix, picw, pich,
Bitmap.Config.ARGB_8888);

return bm;
}
return null;
}

它的名字是这样的

backgroundBitmap = createTransparentBitmapFromBitmap(backgroundBitmap , Color.argb(255,255,255, 0));

我在 png 文件中有相同的颜色,我想要透明孔。问题是它只替换了部分颜色,而不是全部。见截图 https://docs.google.com/document/d/18aH43sFmsuuRu0QNfMTD1zek8sqWwH_pTauFofDZeIw/edit

最佳答案

看起来您的图片中有 JPEG 瑕疵。只有以无损格式保存图片时,检测准确的颜色才会真正起作用。 PNG 是一种无损格式,但您是否在绘制圆圈后将图片的中间版本保存为 JPEG(或其他一些有损格式)?

还有;提示:您不需要两个循环,只需在一个 for 循环中遍历数组即可。

编辑:这个新的黄色看起来是由抗锯齿引起的。因此,圆圈的边缘不是您正在寻找的确切颜色,您的代码会错过它们。解决这个问题的唯一方法是在绘制圆圈时关闭抗锯齿。当然,这样您也不会为透明孔获得漂亮的抗锯齿边缘。

如果需要,您可能必须为孔使用单独的 mask (用于颜色的 JPEG 和用于透明度的 8 位 PNG 应该是一个非常有效的组合 - 哦,我多么希望有一个图像在网络浏览器中很容易允许的格式)

关于android - 用透明度替换位图中的特定颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com