setPixel在位图周围留下黑色边框,如何避免?

时间:2018-12-30 16:20:42

标签: java android

我正在尝试更改位图图像中某些像素的颜色。当我从可绘制文件夹中更改位图图像数组中像素的颜色时,它会在不需要的不同颜色周围留下黑色边框。没有黑色边框怎么办?

初始位图: https://imgur.com/a/JZTSbXe

我尝试了下面的方法,它留下了黑色边框:

bitmap = bitmap_.copy(bitmap_.getConfig(), true);
    int[] pixels = new int[bitmap.getHeight() * bitmap.getWidth()];
    bitmap.getPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
    for(int i = 0; i < pixels.length; i++) {
        if(pixels[i] == Color.rgb(120, 120, 120)) {
            pixels[i] = Color.RED;
        } else
        if(pixels[i] == Color.rgb(90, 90, 90)) {
            pixels[i] = Color.GREEN;
        } else
        if(pixels[i] == Color.rgb(60, 60, 60)) {
            pixels[i] = Color.RED;
        } else
        if(pixels[i] == Color.rgb(30, 30, 30)) {
            pixels[i] = Color.GREEN;
        } else
        if(pixels[i] == Color.rgb(0, 0, 0)) {
            pixels[i] = Color.RED;
        } else {
            pixels[i] = Color.YELLOW;  // Should never fire
        }
    }
    bitmap.setPixels(pixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());

输出中不应有黄色像素,因为图像仅包含0、0、0或30的倍数(最高120)的像素。保存时,它不应是抗锯齿的。但是,您可以看到有黄色像素。或者,如果我不重新着色,它们就会变黑。

不重新涂色:  black border

将黑色重新着色为黄色: enter image description here

1 个答案:

答案 0 :(得分:0)

将位图放置到drawable-nodpi文件夹中可防止Android在运行时按比例放大它们,这会导致抗锯齿。