掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VBAで、GDI+を使って画像を回転させるには? (ID:141084)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>PixelFormat32bppARGBを後押ししていただいたので、VB6のコードを検索してみた結果、 > retval = GdipCreateBitmapFromScan0(300, 300, 0, PixelFormat32bppARGB, ByVal 0&, imgImage) >とすると、エラーにならない事が判明しました。(理屈は分かりませんが) 第5引数はポインタの値渡しと考えるとByValということになるのでしょう。 >手直ししたコードは下記の通りです。これにより、枠は大きくなりましたが、 >GdipDrawImageRectI で貼り付けた画像は枠に合わせて大きくなってしまっています。引き続きアドバイスをお願いいたします。 前にも書きましたが、GdipDrawImageRectRectIです。 > retval = GdipRotateWorldTransform(imgGraphics, angle, MatrixOrderPrepend) > '数字は試行錯誤の途中 > retval = GdipDrawImageRectI(imgGraphics, hImage, lWidth / 2, lHeight / 2, -500, -400) 新しい画像に最低限必要なサイズを、円周率をpiとして width = lWidth * Abs(Cos(angle * pi / 180)) + lHeight * Abs(Sin(angle * pi / 180)) height = lWidth * Abs(Sin(angle * pi / 180)) + lHeight * Abs(Cos(angle * pi / 180)) とします。 回転部分だけならこんな感じでできると思います。 retval = GdipTranslateWorldTransform(imgGraphics, -lWidth / 2, -lHeight / 2, MatrixOrderAppend) retval = GdipRotateWorldTransform(imgGraphics, angle, MatrixOrderAppend) retval = GdipTranslateWorldTransform(imgGraphics, width / 2, height / 2, MatrixOrderAppend) retval = GdipDrawImageRectRectI(imgGraphics, hImage, 0, 0, lWidth, lHeight, 0, 0, lWidth, lHeight, UnitPixel, 0, 0, 0)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.