bitblt的raster operation code在gdi+中的体现是什么?

Magicloud 2005-11-18 09:17:58
也就是如何用gdi+实现反色贴图等功能?
谢谢。
...全文
150 点赞 收藏 6
写回复
6 条回复
swzlxm 2005年12月15日
自己反色
回复 点赞
tiaoci 2005年12月13日
我想构造一个ColorMatrix设置到 imageAttr中就可以了

-1, 0, 0,0,1
0,-1, 0,0,1
0, 0,-1,0,1
0, 0, 0,1,0
0, 0, 0,0,1
矩阵大概是这样的吧,或者转置一下,没试过,应该可行
回复 点赞
tiaoci 2005年12月13日
有这么麻烦吗?
public void DrawImage (
Image image,
Point[] destPoints,
Rectangle srcRect,
GraphicsUnit srcUnit,
ImageAttributes imageAttr
)

在 imageAttr中指定就可以了吧
回复 点赞
Magicloud 2005年12月11日
吐血了,还要unsafe啊……这个gdi+真是糟糕……
回复 点赞
gyf19 2005年11月21日
//反色
public static bool Invert(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;
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;
}
回复 点赞
s5689412 2005年11月20日
好像除了直接使用GDI API之后,GDI+本身并没有这样的功能。
GDI+采用的是对每像素直接进行操作的方式,
在CodeProject上可以以“Image Processing for Dummies with C# and GDI+”为关键字搜索到有关图像处理的系列文章,希望对你有帮助。
回复 点赞
发动态
发帖子
.NET Framework
创建于2007-09-28

1.6w+

社区成员

2.4w+

社区内容

.NET技术 .NET Framework
社区公告
暂无公告