力为的技术博客
联系
聚合
管理
154 Posts :: 1 Stories :: 561 Comments :: 0 Trackbacks
公告
@上海浦东
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(58)
给我留言
查看公开留言
查看私人留言
随笔分类
(154)
2. Graphics(10)
3. VC&MFC&Qt(35)
4. C++ FAQ(35)
5. GP&STL&BOOST(10)
6. COM&ATL&WTL(5)
7. OGRE Analysis(14)
8. ACIS/HOOPS(4)
9.OpenCASCADE(13)
Mac&iOS(5)
Mac&iOS(1)
Tools(22)
积分与排名
积分 - 704654
排名 - 22
最新评论
1. re: 2015武汉校园招聘归来
@eryar
时间安排的太紧,就没有惊扰你啦。
--力为
2. re: 2015武汉校园招聘归来
评论内容较长,点击标题查看
--sunyuanbo
3. re: 2015武汉校园招聘归来
谢谢 您的笔记让我受益匪浅
--仝锡林
4. re: 2015武汉校园招聘归来
不知道来武汉了啊!
--eryar
5. re: 2015武汉校园招聘归来
@力为
谢谢提醒,还在学习中。。。
--编程小学徒
6. re: 2015武汉校园招聘归来
评论内容较长,点击标题查看
--编程小学徒
7. re: 2015武汉校园招聘归来[未登录]
评论内容较长,点击标题查看
--chipset
8. re: 2015武汉校园招聘归来
@编程小学徒
考研也不仅仅靠有编程兴趣就够了,还有其他的课程。好好准备吧,祝考试顺利。
--力为
9. re: 2015武汉校园招聘归来
评论内容较长,点击标题查看
--编程小学徒
10. re: 2015武汉校园招聘归来[未登录]
为了混口饭吃,大家都不容易啊,原谅刷题的同学吧。话说学校里能教啥呀,都靠自己用心,有上进心才是最重要的,否则笔试面试再好也是白扯。从面试官的角度看考试没有错,换成我会找有潜力的或者上进心强的。
--chipset
11. re: 【代码】使用Teigha读取DWG
要用vs2010编译么?
--jj
12. re: 临时对象引用[未登录]
最后一个例子也是零时变量?
--zhonghuajia
13. re: 为什么需要给函数返回类型加const
评论内容较长,点击标题查看
--冬瓜
14. re: 【代码】使用Teigha读取DWG
欢迎加入QQ群122751318,讨论Teigha
--Teigha开发
15. re: CMake + Qt5.1.0
@MIKE
还是不行。
不管是prefix还是library还是include,都尝试过了,不行,网上的方法都不行……
--Delbert
评论排行榜
1. Pro OGRE 3D Programming 电子版(54)
2. 手机号码黑名单(53)
3. 屏幕截图工具V1[附源码](22)
4. 波形显示不是很难(15)
5. 五个小矮人分桃子-一道小学生的作业题目(15)
6. 用CImage加载内存里的Image(14)
7. 用istringstream 解决问题一则(14)
8. OGRE动画练习(13)
9. VC+ADO操作数据库注意事项(1)(13)
10. fstream 和 中文路径(13)
11. OGRE粒子系统之在烈火中永生(11)
12. 如何通过FILE*操作内存文件?(11)
13. VC2008 Feature Pack的问题(11)
14. 升级到 VS2008 SP1 注意问题(11)
15. 失足于shared_ptr(11)
[GDI+]由彩色到黑白
由彩色到黑白
彩色图转换为灰度图公式很简单:
Y
=0.3
RED
+
0.59
GREEN
+0.11
Blue
用GDI+实现的方式由两种:
1. 直接用上述公式修改象素点
2. 用ColorMatrix。
下面是用ColorMatrix实现示例:
using
namespace
Gdiplus;
Image img(wszFileName);
Graphics graphics(GetDC()
->
GetSafeHdc());
ColorMatrix cm
=
{
0.3f
,
0.3f
,
0.3f
,
0
,
0
,
0.59f
,
0.59f
,
0.59f
,
0
,
0
,
0.11f
,
0.11f
,
0.11f
,
0
,
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
0
,
0
,
1
}
;
ImageAttributes ia;
ia.SetColorMatrix(
&
cm);
float
x
=
(
float
)img.GetWidth();
float
y
=
(
float
)img.GetHeight();
graphics.DrawImage(
&
img,
RectF(
0.0f
,
0.0f
,x,y,
0.0f
,
0.0f
,x,y,
UnitPixel,
&
ia);
效果图:
程序下载
posted on 2005-11-16 10:13
力为
阅读(3351)
评论(9)
编辑
收藏
引用
所属分类:
Tools
评论
#
re: [GDI+]由彩色到黑白 2005-11-16 11:05
沐枫
能不能加上两种方法的性能比较。
一般情况下,ColorMatrix的性能比较差(如果直接改象素的程序写的好的话)。
似乎只要用到ImageAttributes,GDI+性能就大幅下降。很明显的一点就是:
带Alpha的图片显示
就是比
不带Alpha而且ColorKey的图片显示
来得快得多!
回复
更多评论
#
re: [GDI+]由彩色到黑白 2005-11-16 17:29
力为
To 沐枫 :
我又看了一下文档,MS说直接更改象素点比用color matrix慢很多。
MS应该是对的吧。 :)
回复
更多评论
#
re: [GDI+]由彩色到黑白 2006-01-19 14:34
武志文
GDI+,如果你把像素点改成用数组来做,肯定比你用getpiel速度要快N多倍.而colorMatrix 用的是数组方式来做的,肯定比直接用像素的快.至于数组跟colorMatrix 比,我没试过.对GDI+有一定的了解,加msn:sillnet@hotmail.com
回复
更多评论
#
re: [GDI+]由彩色到黑白 2006-04-06 15:41
wang
我想把用数据采集卡扫描到的二位数组绘成灰度图,请问怎么绘
能帮帮我么,谢谢
qq 187184137
sunice21@126.com
回复
更多评论
#
re: [GDI+]由彩色到黑白 2006-05-17 10:56
轮回
getpixel肯定是不行的.用lockbits,方法如下:
public static bool Invert0(Bitmap b)
{
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
int nWidth = b.Width * 3;
int h=b.Height;
for(int y=0;y<h;++y)
{
for(int x=0; x < nWidth; ++x )
{
p[0] = (byte)(255-p[0]);
++p;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
return true;
}
回复
更多评论
#
re: [GDI+]由彩色到黑白 2006-11-09 09:34
jillzhang
经过测试,直接用数组比ColorMatrix要快一点
回复
更多评论
#
re: [GDI+]由彩色到黑白 2007-05-07 12:01
smartpig
请问可以把代码发给我学习一下看看吗?
smartpig2008@qq.com 谢谢啦!
回复
更多评论
#
re: [GDI+]由彩色到黑白 2007-11-22 19:58
firerabbit
类似功能,我再CDialog中都没有问题,为什么在Activex中就不工作了呢?
谁有这方面的经验?
回复
更多评论
#
re: [GDI+]由彩色到黑白
2007-11-22 20:00
firerabbit
ia.SetColorMatrix(&cm);这一步老是不成功,返回值为2,我查了一下,是不正确的输入参数,谁遇到过类似情况?
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
Perforce的shelved 命令
我的原创技术随笔大全(2000~2009)
Vista 远程连接设置
Boost.Python与C++互操作的问题(更新)
STL容器误用一则
运算符 && 和 ||
[Debug] 解决图形没有显示的问题
屏幕截图工具V2
VC2008 竟然不带 glaux.lib!
用wxWidgets做界面
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 力为