本文主要是介绍17.3.2.3 逆反(内存处理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
逆反的算法请参看第17.3.1.1节。17.3.1.1 逆反(底片)-CSDN博客
【例 17.41】逆反。
//逆反private void btnInversion_Click(object sender, EventArgs e){//定义目标图片Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);//定义源BitmapData,锁定区域是整个图片,只需要读取模式,采用24位RGBBitmapData sourceData = sourceImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);//定义目标BitmapData,锁定区域是整个图片,只需要写入模式,采用24位RGBBitmapData destData = destImg.LockBits(new Rectangle(0, 0, sourceImg.Width, sourceImg.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);//获得源BitmapData的起始指针位置IntPtr pSource = sourceData.Scan0;//获得源BitmapData占用内存空间的总的字节数int allBytes = sourceData.Stride * sourceData.Height;//定义数组,用来放置源BitmapData的数据byte[] rgbvalues = new byte[allBytes];//把指针位置开始allBytes个字节数据拷贝到rgbvalues()数组中Marshal.Copy(pSource, rgbvalues, 0, allBytes);//数组中第一个字节的序号int pos = 0;int R, G, B;//先高度,后宽度for(int j = 0;j< sourceData.Height;j++){for(int i = 0;i< sourceData.Width;i++){//rgbvalues[pos]对应图片上(i,j)像素对应的蓝色分量值//rgbvalues[pos]对应图片上(i,j)像素对应的绿色分量值//rgbvalues[pos]对应图片上(i,j)像素对应的红色分量值//按照算法进行计算每个颜色分量的值,注意顺序B = 255 - rgbvalues[pos];G = 255 - rgbvalues[pos + 1];R = 255 - rgbvalues[pos + 2];//把求出的各个颜色分量的值写回字节数组rgbvalues[pos] = (byte)B;rgbvalues[pos + 1] = (byte)G;rgbvalues[pos + 2] = (byte)R;//终归是在一维数组里面取数据,向前推进3个字节,注意不用考虑最后的补足字节(即使有)pos = pos + 3;}//一行数据取完了,继续推进到下一行pos = pos + sourceData.Stride - sourceData.Width * 3;}//获得目标BitmapData的起始指针位置IntPtr pDest = destData.Scan0;//将数组的内容拷到pDest指针开始的内存Marshal.Copy(rgbvalues, 0, pDest, allBytes);//不要忘了解锁sourceImg.UnlockBits(sourceData);destImg.UnlockBits(destData);//在图片框显示图片picDest.Image = destImg;}
从以上代码也可以看到使用锁定图像到内存进行处理的步骤:
先是创建了与源图像同样大小的目标图像,然后使用LockBits方法将两个图像都锁定到内存,创建一维字节数组,将内存中源图像数据拷贝到这个一维数组,处理数组,将数组数据拷贝到内存中的目标图像。最后使用UnlockBits解除源图像和目标图像的锁定。
由于采用的算法和像素处理算法一致,所以生成图像相同(下同)。
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看 C# 教程 目录
这篇关于17.3.2.3 逆反(内存处理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!