初めて投稿させていただきます。
VC初心者なんで初歩的な質問をして申し訳ないのですが、
ビットマップファイルを回転して表示する方法について
ご教授願いたいと思います。
内容はダイアログに貼り付けたのScrollView上の論理座標値を計算して
そのエリア上にフォルダ指定したモノクロビットマップを貼り付けます。
現段階では
① LoadImage()でビットマップのハンドルを取得
② GetObject()でビットマップの情報を取得
③ BITMAPINFOHEADER構造体を作成
④ ビットマップのビット列を取得する
char* pchArea=(char*)malloc(bmihdr.biSizeImage*sizeof(char));
nSts=GetDIBits (
pDC->m_hDC, // DC のハンドル,
hBitMap, // DDB 形式のビットマップのハンドル
0L, // 取得する最初の走査行
(DWORD)bmihdr.biHeight, // 取得する走査行の数
pchArea, // ビットマップビット
(LPBITMAPINFO)&bmihdr, // ビットマップデータの構造体
(DWORD)DIB_RGB_COLORS);
⑤ ビットマップを伸縮して貼り付ける
nSts=StretchDIBits(
pDC->m_hDC,
cRectBmpAreaLP.left,
cRectBmpAreaLP.top,
貼り付け先(View上)の横幅(論理サイズ),
貼り付け先(View上)の縦幅(論理サイズ),
0,
0,
bmihdr.biWidth,
bmihdr.biHeight,
pchArea,
(LPBITMAPINFO)&bmihdr,
DIB_RGB_COLORS,
SRCCOPY);
という状況です。
回転していないビットマップならこれで伸縮して貼り付けができているのですが、
回転(必要なのは90°180°270°の3つのみ)して貼り付けることができずに
悩んでいます。
何分初心者なもので、かなり初歩的な質問をしているのかもしれませんが、
どなたかぜひ教えてください。
よろしくお願いいたします。
開発環境はVC5.0、OSはWindows2000です。
回転させるAPIはありませんので、自力で各点を移動する必要があります。
> 回転させるAPIはありません
ですが、GDI+を使えばOKですね
ども、作りたがり屋と申します。
論理座標原点と軸の正負を変える関数とかを
つかっちゃえば…って面倒ですかね。。
SetViewportOrgEx()とかSetWindowOrgEx()とか
GetViewportOrgEx()とかGetWindowOrgEx()とかを
使うのって…無理ですかねぇ。。。
(ごめんなさい、試したことはないんですけど
「いけるんちゃうかな?」って思って投稿しちゃいました)