none
MFCのPictureBoxで画像のストレッチ RRS feed

  • 質問



  •     CImageに読み込んだ画像をPictureBoxにストレッチしたいと思っています
        入門書を読みながら、ピクチャーボックスに画像の一部(クリップ)を表示するまでは行ったのですが・・
        後は、読み込んだ画像をPictureBoxのサイズに自動的にリサイズされるようにしたいのですが、
        そこのところがわかりません。
        画像を自動的にピクチャーボックスのサイズにリサイズして表示するには何をしたら良いでしょうか

        //画像のストレッチ
        CRgn myRgn;    //リージョン
        RECT rctPict;    //四角形
        //ストレッチの実施(クリップしかしていない)
        m_pict.GetClientRect(&rctPict);
        myRgn.CreateRectRgn(rctPict.left, rctPict.top, rctPict.right, rctPict.bottom);   
        pDc->SelectObject(&myRgn);
       
        //
        imgS.Load(".\\a.bmp");    //イメージコントロールに読み出す
        //データの表示   
        myBmp = CBitmap::FromHandle(imgS);    //ビットマップにイメージを取り出す
        myDC.CreateCompatibleDC(pDc);        //ピクチャボックスと互換のあるmyDCに変換
        CBitmap *bitOld = myDC.SelectObject(myBmp);
        pDc->BitBlt(0,0,  imgS.GetWidth() , imgS.GetHeight() , &myDC , 0, 0, SRCCOPY);
        myDC.SelectObject(bitOld);
    2011年9月16日 2:23

回答

    • 回答としてマーク いちろう 2011年9月19日 12:09
    2011年9月16日 2:52
  • こんにちは。

    綺麗にリサイズして表示、が目的ではないのなら、BitBlt 部分を StretchBlt に変更するだけでいいように思います。

    pDc->StretctBlt(0, 0, m_rect.Windth(), m_rect.Height(), &myDC, 0, 0, imgS.GetWidth(), imgS.GetHeight(), SRCCOPY);

    近傍点近似となる為、リサイズ後の表示画像は荒いものになると思いますが、気になるようなら、ビットマップのピクセルカラーを自分で計算し、リサイズ後のビットマップを作成する関数が必要になると思います。

    • 回答としてマーク いちろう 2011年9月19日 12:09
    2011年9月16日 3:01

すべての返信

    • 回答としてマーク いちろう 2011年9月19日 12:09
    2011年9月16日 2:52
  • こんにちは。

    綺麗にリサイズして表示、が目的ではないのなら、BitBlt 部分を StretchBlt に変更するだけでいいように思います。

    pDc->StretctBlt(0, 0, m_rect.Windth(), m_rect.Height(), &myDC, 0, 0, imgS.GetWidth(), imgS.GetHeight(), SRCCOPY);

    近傍点近似となる為、リサイズ後の表示画像は荒いものになると思いますが、気になるようなら、ビットマップのピクセルカラーを自分で計算し、リサイズ後のビットマップを作成する関数が必要になると思います。

    • 回答としてマーク いちろう 2011年9月19日 12:09
    2011年9月16日 3:01
  • お二人ともありがとうございます。

    そのものずばりな関数があったのですね。お恥ずかしい・・・

    2011年9月19日 12:09