C# 如何把 图处理成 反相呢????????????????????????????????????????????????????????? C# 如何把 图处理成 反相呢?????????????????????????????????????????????????????????和 pHOTOSHOP 裏的 反向功能一樣 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的图是什么格式,Bitmap?从原理上说,图像反色就是求R G B这3个分量与255的差,的绝对值R' = |255 - R|B' = |255 - B|G' = |255 - G|但是要对应到实际操作,要看具体Bitmap的颜色格式,比如是16位还是24位还是32位颜色空间是RGB,还是YUV还是灰度还是什么。如果是索引颜色(Indexed),那就更麻烦一点,要改写Palette private void fx(Bitmap g) { for(int i=0;i<g.Width;i++) for (int j = 0; j < g.Height; j++) { Color c = g.GetPixel(i, j); Color cc=Color.FromArgb(255-c.R,255-c.G,255-c.B); g.SetPixel(i,j,cc); } } 謝謝樓上這是我寫的可以反相的代碼 /// <summary> /// 反相图片 /// 2008-7-9 /// daonidedie /// </summary> public void Reverse() { BitmapData bmData = bmpobj.LockBits(new Rectangle(0, 0, bmpobj.Width, bmpobj.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride; System.IntPtr Scan0 = bmData.Scan0; unsafe { byte* p = (byte*)(void*)Scan0; int nOffset = stride - bmpobj.Width * 3; int nWidth = bmpobj.Width * 3; for (int y = 0; y < bmpobj.Height; ++y) { for (int x = 0; x < nWidth; ++x) { p[0] = (byte)(255 - p[0]); ++p; } p += nOffset; } } bmpobj.UnlockBits(bmData); } winform最小化后隐藏到右下角,单击或双击后恢复 关于枚举 在线等答案 求一个 生成 SOAP 字符串的方法, 超级感谢.. winform c1FlexGrid1中怎么内置Combox 怎么判断ip地址是不ipv4的 webbroswer中下载frame里的文件 XmlDocument等对象如何销毁? 请问imagebutton控件能实现这些功能吗? 如何能设计FORM背景图居中而不是平铺? 对象的清除(用过VB的朋友来看看) 怎么样转换生成的文本文件的编码格式 用户校验时,如没有该用户,则SqlDataReader中是什么值?
从原理上说,图像反色就是求R G B这3个分量与255的差,的绝对值
R' = |255 - R|
B' = |255 - B|
G' = |255 - G|但是要对应到实际操作,要看具体Bitmap的颜色格式,比如是16位还是24位还是32位
颜色空间是RGB,还是YUV还是灰度还是什么。
如果是索引颜色(Indexed),那就更麻烦一点,要改写Palette
{
for(int i=0;i<g.Width;i++)
for (int j = 0; j < g.Height; j++)
{
Color c = g.GetPixel(i, j);
Color cc=Color.FromArgb(255-c.R,255-c.G,255-c.B);
g.SetPixel(i,j,cc);
}
}
/// 反相图片
/// 2008-7-9
/// daonidedie
/// </summary>
public void Reverse()
{
BitmapData bmData = bmpobj.LockBits(new Rectangle(0, 0, bmpobj.Width, bmpobj.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
int nOffset = stride - bmpobj.Width * 3;
int nWidth = bmpobj.Width * 3;
for (int y = 0; y < bmpobj.Height; ++y)
{
for (int x = 0; x < nWidth; ++x)
{
p[0] = (byte)(255 - p[0]);
++p;
}
p += nOffset;
}
}
bmpobj.UnlockBits(bmData);
}