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);