日期:2014-05-18  浏览次数:20811 次

见鬼了, 一张15*15的纯白色小图片, 放大N倍, 没有一个黑点,但是遍历时,却发现有像素为黑色
真他妈的见鬼了,还让人睡觉不,真想摔电脑了!!!!
遍历图片的代码如下:
C# code

        public bool CheckNoise(Bitmap bmp, int dgGrayValue)
        {
            bmp.Save("c:\\1.jpg");       // 保存到磁盘上以后, 并看不出有黑点
            for (int x = 0; x < bmp.Width; x++)
            {
                for (int y = 0; y < bmp.Height; y++)
                {
                    if (bmpobj.GetPixel(x, y).R < dgGrayValue)
                    {
                        bmp.Dispose();
                        bmp = null;
                        return true;
                    }
                }
            }
            bmp.Dispose();
            bmp = null;
            return false;
        }



传入的图片是白色的,图片不大, 15*15, 保存到C:\1.jpg以后, 在图片查看器, 或PS中放大到最大,也没发现有黑点, 但是遍历时, 却始终有那么一些像素的RGB为黑色, 即R=0,G=0,B=0, 哪个大哥能帮忙解释一下啊?


------解决方案--------------------
嘿嘿,jpg是有损压缩,不可靠,会不会是噪点的原因,用无损格式,比如png,bmp试试
不过jpg也至于傻成这样,而且你又用ps确认过
不过又没觉得你代码有什么问题
看来我也要睡不着了
------解决方案--------------------
if (bmpobj.GetPixel(x, y).R < dgGrayValue)


bmpobj是啥
------解决方案--------------------
jpg是出现黑点的。
我以前用过一个jpg图片做背景图片,程序使用就发现黑点。
后来的解决办法是:
为了减少图片的尺寸,使用画图工具先做图片,然后拷贝另存为16色或者256色位图(就是bmp),就可以用了,大小比jpg还小。单色是不可以的。
供参考。
------解决方案--------------------
不应该存为jpg
bmp.Save("c:\\1.jpg"); -> bmp.Save("c:\\1.bmp");
------解决方案--------------------
不要用调试模式运行,调试的时候调用GetPixel容易出错;