如何在c#中使用setpixel作为负像素值?

时间:2017-07-02 00:56:49

标签: c# image-processing graphics

当我通过这样做从像素获取图像并得到错误时:

  

附加信息:" -13"的价值不是有效的。

所以请帮助我。

bmp.Setpixel(x,y,Color.FromArgb(100,-12,100,100);

如何对上面的负像素值做什么?

1 个答案:

答案 0 :(得分:2)

你应该做两件事之一。

选项1是您现在正在执行的操作,但具有限制

int clampedRed = Math.Max(0, red - average);
// Repeat for Blue, Green  

bmp.SetPixel(x,y,Color.FromArgb(100, clampedRed, ...)

但更好的方法是不使用平均像素值,因为这会将图像的一半驱动为黑色。可能更好地正常化"图片。这意味着您需要为图像中的每个通道(或四分位数)找到MIN和MAX,然后缩放所有像素。

int minRed = // Get min in image
int maxRed = // get max in image
int rangeRed = maxRed - minRed
float scaling = 255 / rangeRed;

foreach (pixel in image){
   int normalisedRed = (int)((pixelRed - minRed) * scaling)
   int clampedRed = Math.Max(0, Math.Min(255, normalisedRed));
   // And then use that...   
}