图像处理-要将一张512*512的图片转换为灰度图出了问题

问题描述

要将一张512*512的图片转换为灰度图出了问题


代码如下
private void memory_Click(object sender, EventArgs e)
{
if (curBitmap != null)
{
Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height);
System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = curBitmap.Width * curBitmap.Height * 3;
byte[] rgbValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
double colorTemp = 0;
for (int i = 0; i < rgbValues.Length; i += 3)
{
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;
}
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);
curBitmap.UnlockBits(bmpData);
Invalidate();
}
}
结果如下
查了半天代码也没发现问题所在,麻烦帮着指点一下

解决方案

应该是你对图片数据的格式不清楚,不能使用实际的 Length
实际存贮的数据应该是 4 的倍数,具体你可以在网上查一查 BMP 图片的格式、及如何解析,有详细的说明。

解决方案二:

你用Marshal类做灰度化效率不是最高的,图稍微打点,就会有明显的延迟
你可以去学习一下ColorMetrix,颜色矩阵,可以看看这个文章,虽然不是讲灰度化的是讲透明化的,但是你要是看懂了什么颜色都能弄
http://blog.csdn.net/lj1995091/article/details/50547248

时间: 2024-08-06 21:46:11

图像处理-要将一张512*512的图片转换为灰度图出了问题的相关文章

Photoshop简单三步快速打造一张黄色的花朵图片

  Photoshop简单三步快速打造一张黄色的花朵图片 效果   原图   处理过程: 1.打开原图,复制一层,点通道面板,选择蓝色通道,填充黑色.这一步的目的是把花朵改成黄色.   2.点击RGB通道回到图层面板,盖印图层.图层混合模式改为"强光",降低图层不透明度.这一步 的目的是增强图片的对比.   3.盖印图层,用你最擅长的方法给图片锐化一下,完成效果.            注:更多精彩教程请关注三联photoshop教程栏目,三联PS群:182958314欢迎你的加入 分

图片加载-怎么在一个对话框中单击一个按钮后在另一个对话框中的picture控件中显示一张bmp格式的图片

问题描述 怎么在一个对话框中单击一个按钮后在另一个对话框中的picture控件中显示一张bmp格式的图片 我是大一学生,在用mfc做一个员工管理系统,要求在一个对话框的list control 控件中选择一条员工信息,点击一下"显示全部信息"按钮后,弹出一个对话框,这个对话框上的picture控件能显示这个人对应的照片.这个人对应的照片我放在资源文件夹下面.其他我都会,就是照片显示这方面我不知道应该怎么做?各位大神求指教. 解决方案 一个对话框调用另一个对话框的控件值 解决方案二: h

web开发,鼠标hover事件在旁边显示一张二维码图片,有没有相关插件或者类库可以使用

问题描述 web开发,鼠标hover事件在旁边显示一张二维码图片,有没有相关插件或者类库可以使用 如题,其实做显示图片的效果很简单,但是自己做的话要获取相应的位置,而且多个网页使用会出现位置错误,所以我想找找有没类似于jQuery的插件可以使用.之前有看到过,但是没留意,也就没有保存,我想问问各位大神有没有用过?介绍一下 解决方案 $position=$.获取某个id.position(); $(图片).css("top",$position.top+自己加多少).css("

sqlserver-sql2008,对比2张同结构字段的表,找出值不同的字段和他们的值

问题描述 sql2008,对比2张同结构字段的表,找出值不同的字段和他们的值 有两张相同的表A1,A2字段为a,b,c,d,e,f,类型都是char(50),字段的值是未知的.要找出两张表同字段但值不同的字段,并以 字段,A1值,A2值写到A3表.A3表只有一个字段t,类型为varchar(100). 比如: 假定A1,A2表情况如下 A1 A2 a b c d e f a b c d e f 1 2 3 4 5 6 1 3 3 4 4 6 那么C中t字段的值为 b,2,3,e,5,4 sql语

django-Python PIL Django如何将一张任意大小的图片改成指定大小而不产生挤压例如instagram

问题描述 Python PIL Django如何将一张任意大小的图片改成指定大小而不产生挤压例如instagram 如题目,我想知道intsagram那种软件,图片是怎样处理的,我试过很多方法都失败了. 直接用PIL的按比例缩图得到得图片不满足我想要得要求 比如一张1058*900得图片我想改成300*300用什么方法比较好而且能最大得保留图片不受挤压? 在instagram上 无论我上传得图片是多大得,什么样子得尺寸最后展示得都是正方形,我想知道是怎样实现得

viewpager加载一张比较长的图片怎么处理

问题描述 viewpager加载一张比较长的图片怎么处理 viewpager中加载一张图片,比如高度合适但长度超出了屏幕宽度 解决方案 在放图片的样式xml中修改宽度以及展现模式,是满屏还是怎么的,自己选,不懂怎么着就百度图片展现模式

查找-给你一个含有10000张含有英文单词的图片的文件夹,如何快速识别其中相同单词?

问题描述 给你一个含有10000张含有英文单词的图片的文件夹,如何快速识别其中相同单词? 如题,这个压缩文件夹里面有10000张含有英文单词的图片,其中一个英文单词出现了两遍,写一段代码找到这个单词. 点击查看原地址 求源代码,答案 解决方案 1.先用 ORC 将图片中的单词转换成字符串. 2.建字典树一个26叉树 解决方案二: http://download.csdn.net/detail/dongfly000/1498468http://blog.csdn.net/whatday/artic

.NET什么控件可以让一张本来就是动态图片在界面上也出现那种动态的效果啊 ?

问题描述 .NET什么控件可以让一张本来就是动态图片在界面上也出现那种动态的效果啊? 解决方案 解决方案二:???===就是普通的图象控件啊.解决方案三:把图片做成gif不就行了么?解决方案四:gif圖片img控件啊

这是一张很有趣的图片, 通常女性会先看到月亮, 男性会先看到人脸. 如果相反, 表示你体内的异性荷尔蒙偏高哦!

  这是一张很有趣的图片, 通常女性会先看到月亮, 男性会先看到人脸. 如果相反, 表示你体内的异性荷尔蒙偏高哦!    四不像...