创建一个WinForm项目,在窗体上布置加载(but_load)和反相(but_event)按钮和图片框(picbox),首先引用Dll,选择上面地址的DLL:


but_load_Click事件写上加载图片语句,然后打开but_event_Click事件,写上:
Dim bm As Bitmap = picbox.Image
'创建图片副本
Dim bmData = bm.LockBits(New Rectangle(New Point, New Size(bm.Width, bm.Height)), ImageLockMode.ReadWrite, PixelFormat.Format24
bp
pRgb)
'将图片以每个像素24位RGB方式并以可读可写方式锁定在内存
Dim bptr As New BasicPtr.Pointer(bmData.Scan0)
'使用指针类
Dim count = bm.Width * bm.Height
'计算所有像素
For i = 0 To count
'遍历像素
bptr.Set(New Byte() {CByte(255 - bptr.Read(0))})
'读取和替换像素
'推进8位字节,即遍历顺序:(色彩n)(n代表第几个像素)
'红1-绿1-蓝1-红2-绿2-蓝2-红3-绿3-蓝3...
'由于反相每个像素都需要(255-n),所以我们遍历8位字节替换搞定它...
bptr.Add()
'推进8位字节
Next
bm.UnlockBits(bmData)
'必须解锁才能调用
picbox.Image = bm
'更新显示的图片


测试:


你会发现有三分之二的像素没有变化,这是指针弄人的地方,我们只需把遍历的像素翻2倍即可:
Dim count = bm.Width * bm.Height * 3
没错了吧:
