请问如何用GDI+修改图像的RGB通道或者修改色相和饱和度

overcast 2009-01-08 05:03:51
类似PS里面的效果
只能一个一个像素这么处理吗,好像效率比较低而且好像效果也不好,有没有效率高些的方法
谢谢
...全文
251 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
psic__ 2009-01-09
  • 打赏
  • 举报
回复
一个是RGB,一个是HSV,色彩模型都不一样怎么能直接拿颜色矩阵来变换!
「已注销」 2009-01-09
  • 打赏
  • 举报
回复
提供给你快速操作像素的方法
http://blog.csdn.net/breakind/archive/2007/05/09/1602013.aspx
Jay36 2009-01-09
  • 打赏
  • 举报
回复
颜色矩阵会有色彩问题 就如图B、C
Tinary3v0 2009-01-09
  • 打赏
  • 举报
回复
Image mImg( L"System Computer.ico" );
CDC* pdc = GetDC();

ColorMatrix colorMatrix = { //设置色彩校正矩阵
0.30f, 0.30f, 0.30f, 0.00f, 0.00f,
0.59f, 0.59f, 0.59f, 0.00f, 0.00f,
0.11f, 0.11f, 0.11f, 0.00f, 0.00f,
0.00f, 0.00f, 0.00f, 0.30f, 0.00f,
0.00f, 0.00f, 0.00f, 0.00f, 1.00f };

ImageAttributes imageAtt;
imageAtt.SetColorMatrix( &colorMatrix);

Graphics gHandle( pdc->m_hDC );

INT iWidth = mImg.GetWidth();
INT iHeight = mImg.GetHeight();

gHandle.DrawImage( &mImg,640,500);
gHandle.DrawImage( &mImg, Rect( 500, 500, iWidth, iHeight), 0, 0, iWidth, iHeight, UnitPixel, &imageAtt);

GDI+修改图像的RGB通道或者修改色相和饱和度 无非就是对图像的颜色矩阵进行改变
上面的代码 就是将一个图像进行了一次颜色矩阵的改变

楼主参考:http://blog.csdn.net/maozefa/archive/2007/12/27/1995949.aspx
overcast 2009-01-08
  • 打赏
  • 举报
回复
另外问一个公式的问题,比如
某个像素的色相/饱和度/亮度分别为h s l,那么调整的时候的公式如何的呢?
如果色相增加200,是否h = ( h + 200) % 360
那么如果s增加50%应该怎么计算呢,是 s = s + (1 - s) * 0.5吗
谢谢
hhhh63 2009-01-08
  • 打赏
  • 举报
回复
不要用GetPrix(),这个慢
用GetData() 快,一次可以取很多。
laviewpbt 2009-01-08
  • 打赏
  • 举报
回复
用GDI+的函数读取图像数据,然后修改数据。只能一个一个像素的处理,速度上不会慢。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧