VC++でGDI+ そにょ5 〜画像の描画1〜
さて、前回までで読み込んだ画像を描画しよう。描画にはGraphics::DrawImageメソッドを用る。リファレンスのままだと使いにくいので、目的別に分類してみる。
dstは描画先の画像、srcは描画する画像を意味する。メソッドの返値はすべてStatusである。デフォルト引数は見本からは省略して、その後で述べる。
単純描画
dstの左上の位置(dstX, dstY)に描画する。srcの画像は原寸大でクライアント領域に収まる分だけ描画される。
DrawImage(Image *srcImage, INT dstX, INTdstY); DrawImage(Image *srcImage, REAL dstX, REAL dstY); DrawImage(Image *srcImage, const Point &dstPoint); DrawImage(Image *srcImage, const PointF &dstPoint);
拡大縮小
srcの全体を、幅dstWidth、高さdstHeightに拡大または縮小して、dstの(dstX, dstY)に描画する。
DrawImage(Image *srcImage, INT dstX, INT dstY, INT dstWidth, INT dstHeight); DrawImage(Image *srcImage, REAL dstX, REAL dstY, REAL dstWidth, REAL dstHeight); DrawImage(Image *srcImage, const Rect &dstrect); DrawImage(Image *srcImage, const RectF &dstrect);
切取描画
srcの(srcX, srcY)から幅srcWidth、高さsrcHeightだけ切り取って、dstの(dstX, dstY)に描画する。
DrawImage(Image *srcImage, INT dstX, INT dstY, INT srcX, INT srcY, INT srcWidth, INT srcHeight); DrawImage(Image *srcImage, REAL dstX, REAL dstY, REAL srcX, REAL srcY, REAL srcWidth, REAL srcHeight);
第8引数は Unit srcUnit = UnitPixel 。普通はPixel単位で処理するので特に気にしなくて良い。
切取+拡大縮小
srcの領域srcRectを、dstの領域dstRectに描画する。
DrawImage(Image *srcImage, RectF &dstRect, RectF &srcRect);
第4引数は Unit srcUnit = UnitPixel 。
第5引数は ImageAttributes *imageAttributes = NULL 。srcに加工を行いたいときに用いる。
srcの(srcX, srcY)から幅srcWidth、高さsrcHeightだけ切り取り、dstの領域dstRectに描画する。こちらはオプションが追加されている。
DrawImage(Image *srcImage, const Rect &dstRect, INT srcX, INT srcY, INT srcWidth, INT srcHeight); DrawImage(Image *srcImage, const RectF &dstRect, REAL srcX, REAL srcY, REAL srcWidth, REAL srcHeight);
第7引数は Unit srcUnit = UnitPixel 。
第8引数は ImageAttributes *imageAttributes = NULL 。
第9引数は DrawImageAbort callback = NULL。描画をキャンセルするためのコールバックメソッドを指定する。多分使うことはない。
第10引数は VOID *callbackData = NULL。第9引数に指定されるメソッドによって使用される追加データのポインタを指定する。
変形(拡大縮小・平行四辺形・回転)
平行四辺形に変形をする。具体的には、srcの左上、右上、左下の3点についてdstでの座標をPointの配列で指定する。これを利用すれば拡大や回転も行える。
DrawImage(Image *srcImage, const Point *dstPoints, INT count); DrawImage(Image *srcImage, const PointF *dstPoints, INT count);
第2引数はPointの配列である。これは3要素を持ち(Point[3])、順に、左上、右上、左下を示す。
第3引数は指定したPointの数である。これは必ず3でなくてはならないが、デフォルト引数ではないので明示的に指定しなくてはならない。
Point dstPoints[3] = {Point(0, 0), Point(400, 200), Point(100, 300)}; graphics.DrawImage(&image, dstPoints, 3);
切取+変形
srcの(srcX, srcY)から幅srcWidth、高さsrcHeightだけ切り取り、dstPointsで指定される平行四辺形に変形して描画する。countは必ず3を指定する。
DrawImage(Image *srcImage, const Point *dstPoints, INT count, INT srcX, INT srcY, INT srcWidth, INT srcHeight); DrawImage(Image *srcImage, const PointF *dstPoints, INT count, REAL srcX, REAL srcY, REAL srcWidth, REAL srcHeight);
第8引数は Unit srcUnit = UnitPixel 。
第9引数は ImageAttributes *imageAttributes = NULL 。
第10引数は DrawImageAbort callback = NULL 。
第11引数は VOID *callbackData = NULL 。
次回はこのメソッドを用いて回転させる関数を書いてみよう。