0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MFCからSVG変換Advent Calendar 2022

Day 24

MFC から SVG クラスのグラデーション、塗パターン呼び出しコードサンプル

Last updated at Posted at 2022-12-23

MFC から SVG クラスのグラデーション呼び出し

線形グラデーションの2パターンのサンプルコードを比較します。

横方向で緑から青にグラデーションするサンプルです。

MFC(GDI+) の場合以下のようになります。

	RectF rcDraw(0, 0, 300, 50)
    Gdiplus::LinearGradientBrush brush(rcDraw,
        Color(255, 0, 255, 0),
        Color(255, 0, 0, 255),
        LinearGradientModeHorizontal
        );
    pGraphics->FillPolygon(&brush, lpPoints, nCount);

SvgImage に書き出すと以下のようになります。

		CString strGradient = pSvgImage->AddGradient(&rect,
                         RGB(0, 255, 0), RGB(0, 0, 255), GRADIENT_MODE_HORIZONTAL1);
		CString strGradient;
		pSvgImage->AddRect(0, 0, 300, 50);
		pSvgImage->AddFillUrl(strGradient);

横方向で左端から中心まで緑から青に、中心から右端まで青から緑にグラデーションするサンプルです。
中心でグラデーションが折り返すため Gdiplus::LinearGradientBrush::SetBlendTriangularShape 関数で "0.5" を設定します。

MFC(GDI+) の場合以下のようになります。

    
	RectF rcDraw(0, 0, 300, 50)
    Gdiplus::LinearGradientBrush brush(rcDraw,
        Color(255, 0, 255, 0),
        Color(255, 0, 0, 255),
        LinearGradientModeHorizontal
        );
	brush.SetBlendTriangularShape(0.5);
    pGraphics->FillPolygon(&brush, lpPoints, nCount);

SvgImage ではグラデーションの折り返しが中心固定で設定しておりますので指定は特にありません。
可変にしたい場合はカスタマイズしてください。

SvgImage に書き出すと以下のようになります。

		CString strGradient = pSvgImage->AddGradient(&rect,
                         RGB(0, 255, 0), RGB(0, 0, 255), GRADIENT_MODE_HORIZONTAL2);
		CString strGradient;
		pSvgImage->AddRect(0, 0, 300, 50);
		pSvgImage->AddFillUrl(strGradient);

MFC から SVG クラスの塗パターン呼び出し

MFC(GDI+) のハッチパターンの表示に似せて SvgImage::AddHatchStyle 関数を用意しました。
本稿では GDI+ のハッチパターンの表示方法と SvgImage への書き出しを比較します。

MFC(GDI+) の場合以下のようになります。

    HatchStyle hatchStyle = HatchStyleHorizontal;
    Gdiplus::Color backColor(255, 255, 255);
    Gdiplus::Color brushColor(0, 0, 255);
    Gdiplus::HatchBrush brushBack(backColor);
    Gdiplus::HatchBrush brushHatch(hatchStyle, brushColor);
    pGraphics->FillRectangle(&brushBack, 0, 0, 100, 100);
    pGraphics->FillRectangle(&brushHatch, 0, 0, 100, 100);

SvgImage に書き出すと以下のようになります。

    CString strHatch = pImage->AddHatchStyle(HatchStyleHorizontal,
                                         RGB(0, 0, 255), RGB(255, 255, 255));
    pImage->AddRect(0, 0, 100, 100, 0, 0);
	pSvgImage->AddFillUrl(strHatch);
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?