【问题标题】:Invert colors on WinForms在 WinForms 上反转颜色
【发布时间】:2012-02-16 14:49:38
【问题描述】:

在这种情况下,我想使用这种方法反转颜色,我该怎么做?我知道我需要减去 255(但我正在做的地方显然是错误的。它只是一直给我一个我不想要的灰度)

        for (int x = 0; x < bmp.Width; x++)
        {
            //set the new image's pixel to the invert version

            nRow[x * pixelSize] = (byte)(255 - nRow[x + 0]); //B
            nRow[x * pixelSize + 1] = (byte)(255 - nRow[x + 1]); //G
            nRow[x * pixelSize + 2] = (byte)(255 - nRow[x + 2]); //R
        }

【问题讨论】:

  • 只看它(不了解您的代码):nRow[0] 是否意味着nRow[x]?
  • 哎呀,是的,我在玩它,忘了把它改回来..我会解决的..
  • 当你输入一个红色像素时会发生什么? (FF0000)
  • 对不起,我觉得我不太明白。你想让我在哪里尝试输入红色像素?

标签: c# .net winforms


【解决方案1】:

试试这个:

        nRow[x * pixelSize] = (byte)(255 - oRow[x * pixelSize + 0]); //B
        nRow[x * pixelSize + 1] = (byte)(255 - oRow[x * pixelSize + 1]); //G
        nRow[x * pixelSize + 2] = (byte)(255 - oRow[x * pixelSize + 2]); //R

【讨论】:

  • hmm...它的作用与我发布的最后一张图片几乎相同。唯一的区别是蓝色部分现在全变成红色了……你仍然可以看到那部分图像……屏幕的其他部分仍然是黑色的
  • 啊,你明白了。感谢您抽出时间和帮助。 +1 和选定的答案。
【解决方案2】:

你必须把你的减法改成这个

             for (int x = 0; x < bmp.Width; x++)
            {
                //set the new image's pixel to the invert version

                nRow[x * pixelSize] = (byte)(255 - oRow[x]); //changed from nRow to oRow
                //you subtracted every line three times?
            }

据我所知,您从新图片中减去了新图片;)

【讨论】:

  • 嗯,它不起作用......它仍然给我一个灰度图像......而且,它不是一个普通的灰度图像......现在有一些垂直线穿过它原因...
  • 如果你把它转过来怎么办? (byte)(oRow[x+0]-255) AND:出于测试原因将其更改为我更新的代码。
  • 嗯,好吧,我把它改成了 oRow,然后我复制粘贴了(修改 x + 1 和 x+2 也是合适的)......现在它给出了图像的浅灰色版本..但是有这么多垂直线...我无法辨认图像了...根本没有颜色=/
  • @chiffre 实际上他一次设置 3 个 bytes,而不是 3 个像素。注意pixelSize。
  • 你确定像素只有3个字节吗?是否有可能使用 Alpha 通道?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多