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

标签 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

最佳答案

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

关于java - setPixel 在位图周围留下黑色边框,如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53979298/

相关文章:

java - 无限字符串中字符串的第一个索引 - Java

java - Android 上 'onCreate' 方法中的问题

android - textview 上的颜色和样式操作

Java/Android递归文件空指针异常

java - 在 IntelliJ 中清理 Play 框架构建

java - Maven依赖项未随Gradle发布

java - 有界上下文在微服务世界中意味着什么?

android - Gradle 在 Android Studio 中找不到属性文件的属性

android - 在 ArrayAdapter 中覆盖 getDropDownView 时出现样式问题

java - Android SQL 数据库打开和关闭 - 竞争条件