0

DCで画像を描画するためにC++GDI、StretchDIBitsを使用しています。

元の画像が大きいため、高品質が必要です。私はHAFTONEモードを使用して、DCに画像全体を描画する(画像をズームする)のに時間がかかるようです。

そこで、StretchDIBitsを使用して部分的に描画することにしました。しかし、StretchDIBitsには深刻な問題があります。

整数の長方形を整数の領域にのみ描画できます(幅と高さ、およびx、yの左上の点はすべて整数です)

    ::SetStretchBltMode(hdc, HALFTONE);
    ::StretchDIBits(hdc,
        realDrawRect.left, 
        realDrawRect.top, 
        realDrawRect.right - realDrawRect.left, 
        realDrawRect.bottom - realDrawRect.top,
        left, 
        top, 
        width, 
        height,
        pImageDIB,
        pImageHead, 
        DIB_RGB_COLORS, SRCCOPY);

の場合、画像は21*21です。私は今、(5、5、7、7)をDCに(20、20、60、60)で描いています。次に、(21、20、61、60)で描きたいと思っています。元の画像に対応する場所がありません。したがって、DCに近似直線を描くことしかできません。今問題が起こっている、画像が揺れている!

私はその問題に悩まされています。どうすれば揺れを防ぐことができますか?

4

2 に答える 2

0

揺れが整数の丸めに起因する場合は、最も近い整数に切り捨ててみてください。これを参照してください。

それ以外の場合は、作業がはるかに簡単な GDI+ に切り替えることをお勧めします。GDI+ を使用すると、浮動小数点精度でビットマップを描画できます。ドキュメントGraphics::DrawImageを参照してください。

いくつかの MFC Active-X プロジェクトで GDI から GDI+ に切り替えましたが、まったく難しくありません。

于 2009-07-09T09:09:32.200 に答える