当前位置: 首页 > news >正文

品牌高端网站百度词条

品牌高端网站,百度词条,北京城乡建设委员会官方网站,看到一个电商网站帮做淘宝图像处理过程中,比较常见的灰化处理,将彩色图像处理为黑白图像,以便后续的其他处理工作。 在面对大量的图片或者像素尺寸比较大的图片的时候,处理速度和性能就显得非常重要,下面分别用3种方式来处理图像数据&#xff0…

图像处理过程中,比较常见的灰化处理,将彩色图像处理为黑白图像,以便后续的其他处理工作。
在面对大量的图片或者像素尺寸比较大的图片的时候,处理速度和性能就显得非常重要,下面分别用3种方式来处理图像数据,得到不同的处理速度差异:
处理效果对比如下:

第一种方式,直接用.net提供的接口来处理,具有较好的兼容性,但是速度较慢:

       /// <summary>/// 用提取像素方法将图像灰化,有最好的兼容性/// </summary>/// <param name="bitmap"></param>/// <returns></returns>private Bitmap CovertPicturePixels(Bitmap bitmap){try{Bitmap newbitmap = bitmap.Clone() as Bitmap;Color pixel;int ret;for (int y = 0; y < newbitmap.Height; y++){for (int x = 0; x < newbitmap.Width; x++){pixel = newbitmap.GetPixel(x, y);ret = (int)(pixel.R * 0.299 + pixel.G * 0.587 + pixel.B * 0.114);newbitmap.SetPixel(x, y, Color.FromArgb(ret, ret, ret));}}return newbitmap;}catch { return null; }}

第二种方法,使用托管内存来直接操作图像数据,速度速度较第一种方法快约30倍,非常明显,但是要根据不同的图片像素格式来处理数据,相对比较麻烦一些,兼容性不好。

 /// <summary>/// 用托管内存方式处理灰度图像,处理速度比CovertPicturePixels快约30倍,要处理不同的位深/// </summary>/// <param name="bitmapSrc">源图像</param>/// <returns></returns>private Bitmap CovertPictureGrayManagedMemory(Bitmap bitmapSrc){try{Bitmap bitmap = bitmapSrc.Clone() as Bitmap;Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);BitmapData bmpdata = bitmap.LockBits(rect, ImageLockMode.ReadWrite, bitmap.PixelFormat); //锁定内存IntPtr ptr = bmpdata.Scan0;int bytes = bitmap.Width * bitmap.Height * 4;byte[] rgbvalues = new byte[bytes];Marshal.Copy(ptr, rgbvalues, 0, bytes); //图像数据拷贝到内存int factor = 4;if (bmpdata.PixelFormat == PixelFormat.Format32bppRgb)   //暂时只支持常见的格式{factor = 4;}else if (bmpdata.PixelFormat == PixelFormat.Format24bppRgb){factor = 3;}else{return null;}double colortemp = 0;for (int i = 0; i < rgbvalues.Length; i += factor){colortemp = rgbvalues[i + 2] * 0.299 + rgbvalues[i + 1] * 0.587 + rgbvalues[i] * 0.114;rgbvalues[i] = rgbvalues[i + 1] = rgbvalues[i + 2] = (byte)colortemp;}Marshal.Copy(rgbvalues, 0, ptr, bytes); //转换后的数据保存回源图像bitmap.UnlockBits(bmpdata);return bitmap;}catch { return null; }}

第三种方式,直接使用指针来操作内存,得到最快的速度(相比托管内存操作方式略快)。

 /// <summary>/// 用非托管内存方式处理灰度图像,处理速度比CovertPictureGrayManagedMemory略快,要处理不同的位深/// </summary>/// <param name="bitmapSrc"></param>/// <returns></returns>private Bitmap CovertPictureGrayUnManagedMemory(Bitmap bitmapSrc){Bitmap newbitmap = bitmapSrc.Clone() as Bitmap;Rectangle rect = new Rectangle(0, 0, newbitmap.Width, newbitmap.Height);BitmapData bmpdata = newbitmap.LockBits(rect, ImageLockMode.ReadWrite, newbitmap.PixelFormat);byte temp;unsafe{byte* ptr = (byte*)(bmpdata.Scan0);int factor = 4;if(bmpdata.PixelFormat == PixelFormat.Format32bppRgb)   //暂时只支持常见的格式{factor = 4;}else if(bmpdata.PixelFormat == PixelFormat.Format24bppRgb){factor = 3;}else{return null;}for (int x = 0; x < bmpdata.Width; x++){for (int y = 0; y < bmpdata.Height; y++){temp = (byte)(0.299 * ptr[2] + 0.587 * ptr[1] + 0.114 * ptr[0]);ptr[0] = ptr[1] = ptr[2] = temp;ptr += factor;}ptr += bmpdata.Stride - bmpdata.Width * factor;  //bmpdata.Stride:一个扫描行的字节数,bmp的一行数据是4的整数倍}}newbitmap.UnlockBits(bmpdata);return newbitmap;}

由于是非安全的内存操作,要在工程启用相关配置:
在这里插入图片描述
文章和代码均为原创,欢迎转载,请注明出处!

http://www.hkea.cn/news/764104/

相关文章:

  • 南通城市建设集团有限公司网站南京谷歌推广
  • 南通网站定制方案怎么查找关键词排名
  • 权大师的网站是哪个公司做的百度做个人简介多少钱
  • 烟台网站建设设计软文广告经典案例100字
  • 做微信用什么网站广州百度seo代理
  • 网站建设目标 优帮云跨境电商营销推广
  • 郑州华恩科技做网站怎么样竞价排名适合百度吗
  • flask做大型网站开发深圳seo博客
  • 合肥网站建设平台小程序怎么引流推广
  • 做网站被拘留免费找客源软件
  • 门户型网站建设百度seo快速提升排名
  • 印度做杂质的网站如何进行网络推广
  • 建设厅八大员兴安盟新百度县seo快速排名
  • 南京网站建设索q.479185700小说排行榜百度
  • 幼儿做爰网站seo工程师是什么职业
  • 申请空间 建立网站吗西安百度推广运营
  • 做花馍网站百度联盟
  • 沈阳建设企业网站google浏览器官网
  • 毕业论文 网站开发营销qq下载
  • 建网站要多长时间外贸网站优化
  • 苹果网站做的好的点电脑培训网上免费课程
  • 做网站开源互联网优化是什么意思
  • 模仿做网站b站上海热点新闻
  • phpcmsv9网站地图地推的60种方法
  • 湖南手机版建站系统哪个好百度网盘app怎么打开链接
  • asp网站开发的实训报告电商营销推广有哪些?
  • 交互设计流程外贸网站优化公司
  • 网络营销网站策划个人网站seo入门
  • 云南省网站备案要求全渠道营销的概念
  • 装修网站合作平台有哪些torrentkitty磁力猫