用C# 实现位图像素处理

ainge 2007-04-06 12:00:40
本人要做一个信息隐藏的软件,原理是只样的W'=W+a*X,其中,W'是嵌入水印后的图象像素,W是原始图象的像素,X是要嵌入的水印(二进制:0或者1),a是嵌入因子,一般在0~1之间。在BMP中一个像素有24bit,用Getpixel()方法得到的像素是Color类型,但在嵌入的时候加的值是个小数,而像素是一个24bit的数,这个怎么处理?还有,一个Color类型不能直接与一个float或者double类型直接相加?那这个又怎么转换?有高人指点一下啊,给出一点思路或者一段代码!谢谢.
如果有代码能不能发到:zh1985444@sina.com.cn
...全文
480 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ainge 2007-04-06
  • 打赏
  • 举报
回复
楼上的这个我懂,关键是我上面说的如何嵌入和提取
windylau23 2007-04-06
  • 打赏
  • 举报
回复
翻转算法:
public static bool Invert(Bitmap b)
{
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;
int nWidth = b.Width * 3;
for(int y=0;y<b.Height;++y)
{
for(int x=0; x < nWidth; ++x )
{
p[0] = (byte)(255-p[0]);
++p;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
return true;
}
windylau23 2007-04-06
  • 打赏
  • 举报
回复
up

111,095

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧