Как получить постоянную градиентную заливку в GDI + при использовании повернутого LinearGradientBrush? - PullRequest
1 голос
/ 17 ноября 2010

Я использую GDI + в своем приложении, и мне нужно использовать повернутый LinearGradientBrush для рисования нескольких канавок точно таким же образом. Однако, хотя я вызываю один и тот же код для заполнения каждого прямоугольника, результаты не соответствуют ожиданиям. Вот код для создания градиентной заливки, где rcDraw - это прямоугольник, содержащий область для рисования для каждого прямоугольника. Эти координаты находятся в координатах родительского окна, поэтому они не идентичны для двух ритов.

g_hbrLinear = new LinearGradientBrush (Rect (0, rcDraw.top, 0, rcDraw.bottom - rcDraw.top), clrStart, clrEnd, (REAL) 80, FALSE);

То, что я вижу на экране, выглядит следующим образом (http://www.nnanime.com/bugs/LinGradBrush-rotate10.png).). Вы можете видеть, как будто заливка из первого прямоугольника продолжается во второй. Что я действительно хочу, так это чтобы эти два прямоугольника выглядели одинаково. Я думаю, что могу сделать это, если я рисую каждый прямоугольник отдельно, используя его собственные клиентские координаты, но для целей моего приложения мне нужно использовать координаты родительского окна.

Полагаю, я спрашиваю, как GDI + вычисляет «происхождение» заливки? Всегда ли это основано на 0,0 в используемой вами системе координат? Есть ли способ сдвинуть его? Я пробовал TranslateTransform, но, похоже, он не сдвигает заливку так, как мне кажется предсказуемым или понятным.

Ответы [ 2 ]

0 голосов
/ 12 октября 2014

Мой опыт с «преобразованием» линейных градиентных кистей совпадает с вашим;Я не смог понять, что он должен делать.

Вы можете представить кисть в GDI + как мир отображения функций, координирующий цвет.То, как выглядит кисть в данной точке, не изменяется в зависимости от заполняемой фигуры.

Она изменяется в зависимости от преобразования объекта Graphics, на котором вы рисуете.Итак, если вы не хотите менять кисть, вы можете временно изменить преобразование объекта Graphics, чтобы нарисованный прямоугольник имел определенный, известный размер и положение в мировых координатах.Методы BeginContainer и EndContainer должны упростить это.

(Существует также свойство RenderingOrigin, но оно влияет только на кисти штриховки, которые, как ни странно, не зависят от преобразований мира.)

0 голосов
/ 18 ноября 2010

Прямоугольник, переданный кисти линейного градиента, определяет, где будут располагаться левый и правый цвета, и градиент будет окрашен в этом прямоугольнике.

Итак, я думаю, вам нужно создать кисть для каждогопрямоугольник, который вы рисуете, где прямоугольник, который вы рисуете, также передается конструктору для кисти с линейным градиентом.

...