求C#亮度算法
我想处理一张jpg图片的亮度,应该怎么做啊? 问题点数:80、回复次数:6Top
1 楼xinling195(闲趣)回复于 2005-10-27 13:04:02 得分 0
看一眼:http://www.sz3000.com/index.htm?QQ=822982Top
2 楼s5689412(华君)回复于 2005-10-27 13:17:32 得分 80
lz真是让人怎么说呢。
http://community.csdn.net/Expert/topic/4348/4348444.xml?temp=.7795374
给你提供了那么好的参考资料,非的要一个一个代码追着要。
昨天给了你对比度的函数,今天又要亮度的代码,明天也许就是灰度了。
唉......
public static bool GrayScale(Bitmap b)
{
// GDI+ still lies to us - the return format is BGR, NOT RGB.
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
byte red, green, blue;
for(int y=0;y<b.Height;++y)
{
for(int x=0; x < b.Width; ++x )
{
blue = p[0];
green = p[1];
red = p[2];
p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);
p += 3;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
return true;
}Top
3 楼s5689412(华君)回复于 2005-10-27 13:21:48 得分 0
啊,发错了,说着灰度,就给发成灰度的代码了...
BTW:为什么不喜欢好好看看别人的回复呢?只想着要代码,解决问题了事...
public static bool Brightness(Bitmap b, int nBrightness)
{
if (nBrightness < -255 || nBrightness > 255)
return false;
// GDI+ still lies to us - the return format is BGR, NOT RGB.
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
int nVal = 0;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
int nWidth = b.Width * 3;
for(int y=0;y<b.Height;++y)
{
for(int x=0; x < nWidth; ++x )
{
nVal = (int) (p[0] + nBrightness);
if (nVal < 0) nVal = 0;
if (nVal > 255) nVal = 255;
p[0] = (byte)nVal;
++p;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
return true;
}Top
4 楼CruelYoung123(向牛人们学习@HOHO~~~)回复于 2005-10-27 13:41:01 得分 0
不错,呵呵Top
5 楼fanweiwei(黑暗凝聚力量,堕落方能自由)回复于 2005-10-27 14:05:14 得分 0
http://www.sz3000.com/index.htm?QQ=586852Top
6 楼tayuly(告诉我)回复于 2005-10-28 08:35:23 得分 0
谢谢s5689412(华君),我的E文不好,因为以前没接触过图像处理这一块,这方面的资料又不多,确实没搞明白,最后还是谢谢你了~Top




