Image Light

露出不測の BMP 画像を補正します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

露出不測の補正

  1. 上の画像は氷瀑を撮ったものですが、デジカメの選択スイッチを間違えて露出不測の画像になってしまいました。
    画像の色(ピクセル)は、3原色(赤緑青)を8ビット(256階調)の組み合わせで表します。
    青色(B)の8ビット 緑色(G)の8ビット 赤色(R)の8ビット
    露出不測と言うことは、3原色のレベルが全体的に暗い(値が小さい)状態です。
    そこで3原色のレベルを大きくして露出不測を補正してみます。
  2. ImageAI Class に組み込まれている Light() 関数を使います。
    DibStruct の画像データに、ピクセル毎にアクセスして値を調整します。
    val が明るさの値で 100 で元の明るさで 200 で二倍の明るさです。
    // Image 画像を Dib.hBmp に転送して val(100~600) の明るさに設定する関数
    void  IMAGEAI::Light(WORD val)
    {   LONG    dx, dy, cp;
        WORD    wk;
    
        Show(Dib.hBmpDC, 0, 0);
        for (dy = 0; dy<m_Height; dy++)
            for (dx = 0; dx<m_Width; dx++)
                for (cp = 0; cp<3; cp++)
                {
                    wk= MAP(dy, dx, cp);
                    wk= (wk*val)/100;
                    if (wk > 255)   wk = 255;
                    MAP(dy, dx, cp) = (BYTE)wk;
                }
    }
    
  3. Main.cpp では、明るさを調整する領域を定義して、マウスのクリックで値をアップします。
    char    ImgFile[]= "Dark.bmp";
    WORD    val= 100;       // 明るさ(100~600)
    
            ・・・
    
            case WM_LBUTTONDOWN:    // 左ボタンをクリック
                val+= 20;
                if (val>600)    val= 100;
                ImageAI->Light(val);
                InvalidateRect(hWnd,NULL,FALSE);
                break;
    
  4. AppInit() では、画像をロードした後で DibStruct を初期化して下さい。
    Adjust() で画像サイズに合わせてウインドウサイズを設定します。
    Light(100) で最初は元の露出(明るさ)で描画します。
    // 画像をロードして、24bit DIB を作成
    LRESULT  AppInit(HWND hwnd)
    {   HDC      hDC;
    
        ImageAI= new IMAGEAI(hwnd);
        if (ImageAI->LoadBmp(ImgFile)==false)  return false;
        ImageAI->InitDib();
        ImageAI->Adjust();
        ImageAI->Light(100);
        return true;
    }
    
  5. WM_PAINT では val に従って明るさを調整した画像を ShowDib() で描画します。
            case WM_PAINT:          // Dib の画像を描画
                hdc = BeginPaint(hWnd,&ps);
                if (ImageAI)   ImageAI->ShowDib(hdc,0,0);
                EndPaint(hWnd, &ps);
                break;
    
  6. この画像はテスト用に撮影したものでは無いので念のため。 (^_^;)
    このプログラムを使えば、貴方が撮影した露出不測の写真を補正することが出来ます。
    ImageAI Class や Main.cpp の基本ソースコードは Image 3原色 を参照して下さい。

[Next Chapter ↓] Image BIG
[Previous Chapter ↑] Image 3原色

超初心者のプログラム入門(Win32API C++)