用PHOTOSHOP的曲线工具来观察RGB值变化,一个图片,用曲线调节变淡,某一点的RGB值由(123,153,225)变为(163,191,240),又试了几次,没有发现这些数值变化的规律。
现在想通过运算RGB值使得整个图片颜色变深或变淡(暗或亮),怎么做呢?

解决方案 »

  1.   

    RGB乘以一个比例,比如0.7,最直白的方法就是SetPix,GetPix,不过效率不怎么高,SetDIBits这个稍微好点.这是我做截图时把图片变暗的代码for(int i = 0;i < bmp.bmWidth*bmp.bmHeight;i++) 

    color   =   pData[i]; 
    b   =   (color   <<   8   >>   24)*0.7; 
    g   =   (color   <<   16   >>   24)*0.7; 
    r   =   (color   <<   24   >>   24)*0.7; 
    pData[i]   =   RGB(r,   g,   b); 

    SetDIBits(pDC-> m_hDC,   hbmp,0,   bmp.bmHeight,   pData,&bmpInfo,   DIB_RGB_COLORS); 
      

  2.   


    这个算法貌似不能解释某一点的RGB值由(123,153,225)变为(163,191,240)这个现象
      

  3.   

    将RGB等比调小是可以将亮度变暗,至于LZ说的那我就不知道了
      

  4.   

    RGB值就是0-255(一个byte),别乘,就是+(变亮)或者-(变暗)一个步进值就可以了
      

  5.   


    alpha* color1 + (1-alpha) * color2;
    //想要变暗 color2取RGB(0,0,0),alpha从0到1越小越黑
    //想要变亮 color2取RGB(255,255,255)alpha从0到1越小越白
      

  6.   

    上面个别字错了,想要变暗 与黑色作线性插值。想要变亮 与白色作线性插值
    甚至想蒙一层绿色 color2取RGB(0,255,0),即与绿色作线性插值即可
      

  7.   

    把RGB转换成 HSB,再把亮度减少再转回来试试
      

  8.   

    当然得对RGB以及透明通道(有的话)分别作插值处理,如果直接用那个4字节的颜色值变量整体作插值是不可以的