Мне нужно создать кисть с линейным градиентом, чтобы нарисовать поверхность с помощью GDI +. На вход я получаю следующие параметры:
Viewport rect: x = 0, y = 0, width = 744.09448819f, height = 1052.3622047f
Fill rect: x = 13.040037f, y = 17.478735f, width = 721.3703f, height = 1009.1535f
Gradient start: x = 384.8, y = 611.46
Gradient stop: x = 378.93, y = 474.96
Start color: a = 255, r = 179, g = 221, b = 253 (between 0 and 255)
End color: a = 255, r = 51, g = 102, b = 152 (between 0 and 255)
Matrix to apply: a = 7.7430985, b = 0, c = 0, d = 7.2926249, e = -2439.6639, f = -3446.2263
Wrap mode: clamp
Эти значения были извлечены из файла SVG. Когда я открываю его в своем браузере, я получаю следующий результат:
https://drive.google.com/open?id=0B7C-RwCTA9qaNnFsaGJpenlseGc
Теперь я пытаюсь нарисовать точно такой же градиент с помощью GDI +. Для этого я использую Embarcadero RAD Studio c ++ builder. Я написал следующий код:
void DrawGradient()
{
std::auto_ptr<TBitmap> pBitmap(new TBitmap());
pBitmap->Width = 744.09448819f;
pBitmap->Height = 1052.3622047f;
pBitmap->Canvas->Brush->Color = clWhite;
pBitmap->Canvas->FillRect(TRect(0, 0, pBitmap->Width, pBitmap->Height));
Gdiplus::Graphics graphics(pBitmap->Canvas->Handle);
Gdiplus::LinearGradientBrush brush(
Gdiplus::PointF(384.8, 611.46),
Gdiplus::PointF(378.93, 474.96),
Gdiplus::Color(255, 179, 221, 253),
Gdiplus::Color(255, 51, 102, 152)
);
Gdiplus::Matrix matrix(7.7430985, 0, 0, 7.2926249, -2439.6639, -3446.2263);
brush.SetTransform(&matrix);
graphics.FillRectangle(&brush, 13.040037f, 17.478735f, 721.3703f, 1009.1535f);
pBitmap->SaveToFile(L"test.bmp");
}
Однако я получаю этот результат:
https://drive.google.com/open?id=0B7C-RwCTA9qaU1BhSTJxay16Z00
Оставляя в стороне вопрос об ограничении, для которого я знаю, что GDI + не предлагает простого решения (как, например, помещение Gdiplus :: WrapModeClamp в функцию SetWrapMode (), которая может быть настолько простой для пользователей), результирующий чертеж должен по крайней мере быть ближе к ожидаемому результату, или я ошибаюсь?
Кто-нибудь может объяснить мне, почему я получаю такой другой результат?
НОТА Я уже подправил все параметры, получаю сразу несколько вариаций одного и того же неправильного результата
НОТА Оригинальный SVG, на который я ссылаюсь выше, можно получить здесь:
https://drive.google.com/open?id=0B7C-RwCTA9qaYkNRQ3lJNC1fNmM
С уважением
Задача ещё не решена.
Других решений пока нет …