Как исправить размытый Icon Decorator в DSL Tools?
Я столкнулся с этой проблемой, и после обширных исследований я нашел ее причину и обходной путь, который может быть полезен для других людей.
Декоратор иконок становится "размытым" из-за его позиционирования по форме и преобразования пикселей в дюймы.
Обычно поверхность рисования языка, специфичного для предметной области, имеет разрешение 96 точек на дюйм, а декораторы значков располагаются со смещением 0,06 дюйма. Переводя его в пиксели, он становится смещением 5,76 пикселей на поверхности рисования. Поскольку невозможно нарисовать "полупиксель" на экране, GDI+ корректирует изображение в попытке эмулировать позиционирование "haf-пикселя". Вот почему изображение становится размытым.
В качестве обходного пути я предлагаю использовать свойства "Смещение по горизонтали" и "Смещение по вертикали" класса декоратора "Иконка" для фиксации положения "полупикселя" декоратора. Если вы используете "0,0025" дюйма в качестве смещения по вертикали и горизонтали, то при позиционировании изображения с дюймов на пиксели оно становится 6 пикселей вместо 5,76. Это происходит потому, что смещение теперь является значением по умолчанию 0,06 дюйма плюс смещение, которое вы установили 0,0025 = 0,0625.
Я также обнаружил, что использование изображений png с прозрачностью приводит к размытию изображения, даже используя обходной метод смещения, который я предложил здесь. Преобразование изображения в растровый формат устраняет проблему.
Если у кого-то также есть какие-либо предложения по устранению проблемы, добавьте свое решение или обходной путь.
1 ответ
Я исправил размытую проблему, создав новое растровое изображение:
По переопределенному методу
public override System.Drawing.Image GetDisplayImage(ShapeElement parentShape)
Я вызываю мой собственный метод FixBitmap
Bitmap imageFixed = DynamicImageHelper.FixBitmap(image, out dynamicOffset);
Этот метод получает исходное изображение, которое будет отображать DSL, но вместо этого возвращает точно такое же изображение, но созданное как новое растровое изображение
Bitmap fixedImage = new Bitmap(original, original.Width, original.Height);
return fixedImage;
Если вы проверите свойства нового экземпляра, то между ними будут небольшие различия (я не совсем помню, потому что я реализовал это около 1 года назад). Кроме того, я в основном использую.png файлы с прозрачностью, и они выглядят именно так, как они есть.
Надеюсь, это помогло. Если вам нужна дополнительная помощь, не стесняйтесь, С уважением, Луис