源代码也行啊.多谢啊!!!

解决方案 »

  1.   

    void OnAdjustBrightness() 
    {

    COperateDIBDoc* pDoc=GetDocument();
    LPSTR lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
    AdjustBrightness(lpDIB,-80);
    pDoc->SetModifiedFlag(true);
    OnDoRealize((WPARAM)m_hWnd,0);
    pDoc->UpdateAllViews(NULL);}
      

  2.   

    楼上的谢谢,但有没有有更简单的方法,用GDI
      

  3.   

    这个,我觉得你应该先了解调整亮度的原理,其实就是给每个象素加上一个值(正为增大亮度,负为减小亮度)。
    下面的代码中m_SliderBright是调整的亮度值,并且对于灰度图
    for(i = 0; i < Width; i++)
    for(j = 0; j < Height; j++)
    {
    lpSrc = (unsigned char *)lpDIBBits + j * LineBytes + i; if(m_SliderBright >0)
    {
    if(*lpSrc <= 255 - m_SliderBright)
                    *lpSrc = *lpSrc + m_SliderBright;
    else
         *lpSrc = 255;
    }
    else
    {
    if(*lpSrc >= abs(m_SliderBright))
    *lpSrc = *lpSrc + m_SliderBright;
    else
    *lpSrc = 0;
    }
    }
      

  4.   

    谢谢楼上的,但这个算法好像只对BMP位图有用哇.如果我要对GIF,JPG等图片进行修改亮度呢?它们的格式好像和BMP不大一样哇.有什么好的方法啊?
    谢谢
      

  5.   

    我刚做完这个,大概思路是这样,使用CMemFile和GDI+ 在内存中把GIF,JPG等图像转换为BMP,然后使用CDib类和ColorRGBToHLS把每一个数据点的亮度都增加后然后再使用ColorHLSToRGB转变回来,然后保存就行了.
      

  6.   

    gdi+可以直接调整的,我给段代码给你
    m_fR = pSliderBar -> GetRed() / 100 + pSliderBar ->GetBrightness() /100 + 0.01f;
    m_fG = pSliderBar -> GetGreen() / 100 + pSliderBar ->GetBrightness() /100 + 0.01f;
    m_fB = pSliderBar -> GetBlue() / 100 + pSliderBar ->GetBrightness() /100 + 0.01f;
    m_fContrast = pSliderBar ->GetContrast() / 100; // 用于调整色彩
    ImageAttributes imageAttributes;
    ColorMatrix colorMatrix = {
       1.0f + m_fContrast , 0.0f , 0.0f , 0.0f , 0.0f ,
       0.0f , 1.0f + m_fContrast , 0.0f , 0.0f , 0.0f ,
       0.0f , 0.0f , 1.0f + m_fContrast , 0.0f , 0.0f ,
       0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
       m_fR, m_fG, m_fB, 0.0f, 0.0f}; imageAttributes.SetColorMatrix(
    &colorMatrix, 
        ColorMatrixFlagsDefault,
    ColorAdjustTypeBitmap);
      

  7.   

    楼上的,多谢,能给的完整点吗?我想在SLIDER条中修改亮度.
    上面为什么要加0.01??