MSDNによると:
nWidthSrc パラメータと nWidthDest パラメータの符号が異なる場合、または nHeightSrc パラメータと nHeightDest パラメータが異なる場合、StretchBlt はビットマップのミラー イメージを作成します。
ということで、逆さ画像を作ってみました。次のようなクラスがあります。
class Picture
{
private:
HBITMAP bmp; //Bitmap
HDC pdc; //Device context
short int w; //Weidth of bitmap
short int h; //Heighth of bitmap
public:
short int x;
short int y;
void draw(HDC);
void upside_down();
}
そして私はこの方法を持っています:
void Picture::upside_down()
{
HDC dc = CreateCompatibleDC(pdc);
HBITMAP bmap = CreateCompatibleBitmap(pdc, w, h);
SelectObject(dc, bmap);
BitBlt(dc, 0, 0, w, h, pdc, 0, 0, SRCCOPY);
StretchBlt(pdc, 0, 0, w, h, dc, 0, 0, w, -h, SRCCOPY);
DeleteDC(dc);
DeleteObject(bmap);
}
しかし、それは機能しません、何も起こりません。DC互換性があるのだろうか、その背後にあるロジックを理解するのに常に問題がありました。
では、ビットマップを反転させるにはどうすればよいでしょうか?