早教吧作业答案频道 -->其他-->
c#图像处理已经知道像素数据,想生成一幅图片存到本地计算机,有没有高效的方法??(除了使用双重for循环setPixel)
题目详情
c#图像处理已经知道像素数据,想生成一幅图片存到本地计算机,有没有高效的方法?? (除了使用双重for循环setPixel)
▼优质解答
答案和解析
由于C#托管代码中不能使用指针(后来经过我的验证,即使是在unsafe代码中用指针操作,速度仍然很慢),因此我们就不能像C++里面一样直接利用指针在内存中完成读写操作。好在.NETFramework提供了托管内存与非托管内存之间的读写功能,一个强大的Marshal类,使得我们快速读写图像的像素信息成为可能。 在.NETFramework2.0中,Bitmap类多了两个有关内存操作的新方法:LockBits与UnlockBits,其具体含义请参见MSDN,我在这里就直接给出利用它们以及Marshal类进行内存读写的代码。上面的GetRGB方法经过改进之后: publicstaticboolGetRGB(BitmapSource,outint[,]R,outint[,]G,outint[,]B) { try { intiWidth=Source.Width; intiHeight=Source.Height; Rectanglerect=newRectangle(0,0,iWidth,iHeight); System.Drawing.Imaging.BitmapDatabmpData=Source.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite,Source.PixelFormat); IntPtriPtr=bmpData.Scan0; intiBytes=iWidth*iHeight*3; byte[]PixelValues=newbyte[iBytes]; System.Runtime.InteropServices.Marshal.Copy(iPtr,PixelValues,0,iBytes); Source.UnlockBits(bmpData); //注意这个地方图像的两维方向与数组两维的方向是转置的关系 R=newint[iHeight,iWidth]; G=newint[iHeight,iWidth]; B=newint[iHeight,iWidth]; intiPoint=0; for(inti=0;i
看了c#图像处理已经知道像素数据,...的网友还看了以下:
1、y=x³-3x²+6x-2在[-1.1]上的最大值与小值2、已知某厂生产x件产品的成本为c=2 2020-04-27 …
日本发动“九一八事变”的有利的客观原因是A.国内阶级矛盾尖锐B.经济危机使日本经济困难C.侵略中国 2020-05-12 …
“二战”后,促使德国、日本经济快速发展的相同因素是A.采用了外向型经济发展战略B.利用了本国的廉价 2020-05-16 …
(2009年3月南通市高三第一次调研)1956年前后,日本加入了关贸总协定、联合国等国际组织,这对 2020-05-16 …
某书店开设两种租书方式:一种是零星租书,每本收费1元;另一种是会员卡租书,办卡费每月12元,租书费 2020-06-12 …
图书馆原来有124本连环画,,现在有X本,现在有多少本连环画?使方程X+68=124成立的条件是( 2020-07-18 …
明治维新使日本走向了“脱亚入欧”的道路,在经济方面既吸收了西方文明成果,又兼日本特色。与同一时期的西 2020-12-18 …
明治维新使日本走向了“脱亚入欧”的道路,在经济方面既吸收了西方文明成果,又兼日本特色。与同一时期的西 2020-12-18 …
漫画《扶持》中,我国加大对微小企业、个体工商户的扶持有利于()A.使非公有制经济成为国民经济的主导力 2020-12-18 …
日本是世界第二大经济体,目前,日本极力谋求联合国常任理事国。促使日本想成为联合国常任理事国的根本原因 2021-01-12 …