当我通过这样做从像素获取图像并得到错误时:
附加信息:" -13"的价值不是有效的。
所以请帮助我。
bmp.Setpixel(x,y,Color.FromArgb(100,-12,100,100);
如何对上面的负像素值做什么?
答案 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...
}