【问题标题】:setPixel leaving a black border around bitmap, how to avoid?setPixel 在位图周围留下黑色边框,如何避免?
【发布时间】:2018-12-30 16:20:42
【问题描述】:

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

初始位图:

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

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 的倍数的像素。保存时它不应该是抗锯齿的。但是,如您所见,有黄色像素。或者如果我不给它们重新着色,它们就会变黑。

无需重新着色:

将黑色重新着色为黄色:

【问题讨论】:

  • 可以分享截图吗?
  • 现在添加,最初没有正确添加
  • 如何确定没有抗锯齿功能?
  • 调试程序,打印不符合条件的像素。听起来您的假设很有可能是错误的。
  • 它只输出一个整数,不知道它与像素颜色有何关系。但是它在保存时没有抗锯齿,看起来好像android系统在加载时正在这样做。

标签: java android


【解决方案1】:

将位图放入 drawable-nodpi 文件夹可防止 Android 在运行时放大它们,从而导致抗锯齿。

【讨论】:

    猜你喜欢
    • 2017-08-08
    • 2011-12-28
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多