Как я могу создать маску прозрачности в wpf, которая не масштабируется? - PullRequest
0 голосов
/ 07 апреля 2011

Хорошо, я создал PNG-24 с прозрачностью. Это в основном изображение в градациях серого, в котором вместо черного и белого используются «цвета» между черным и прозрачным. Я сделал это, чтобы использовать его в качестве маски непрозрачности для цветного прямоугольника, таким образом, отображая изображение в любом цвете, который я хочу, используя только одну графику.

Однако, на всю жизнь, я не могу заставить WPF прекратить сглаживание изображения da * n !!

Я установил «SnapesToDevicePixels» на прямоугольнике, к которому применяется кисть ... Я установил масштаб ImageBrush на «Нет» ... Я установил его ViewPort и ViewBox на абсолютные единицы и размеры их точно к исходному изображению. Но независимо от того, что я пытаюсь, WPF все еще настаивает на том, чтобы сгладить ситуацию! Это ОЧЕНЬ расстраивает !!!

Итак ... кто-нибудь знает, как использовать изображение в качестве маски непрозрачности, но не потерять точный рисунок, который мы сделали? Я просто хочу, чтобы WPF сделал эту чертову штуку такой, какой мы ее рисовали, точка!

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Я пытался воспроизвести вашу проблему. Просто так:

        <Rectangle Width="200" Height="200" Fill="Red">
            <Rectangle.OpacityMask>
                <ImageBrush ImageSource="/mask.png"/>
            </Rectangle.OpacityMask>
        </Rectangle>

mask.png содержит простую диагональную маску, например, половина прямоугольника видима, а другая половина прозрачна на 100%. И recrangle делает пиксель идеальным (и псевдонимом, как вы хотите). Я думаю, что вы можете установить параметр DPI, который не является родным для вашего монитора, и WPF просто не может правильно отображать изображения.

1 голос
/ 07 апреля 2011

ПОЛУЧИЛ ЭТО!Это проблема компоновки, которую по какой-то причине не так просто изменить.Однако есть значение, которое вы можете установить, называемое UseLayoutRounding, которое исправляет это.Я просто установил его на корневом уровне (для этого fauxample, сетка ...)

<Grid UseLayoutRounding="True">
    ....
</Grid>

... и BAM!Работает как шарм!«Sort of», как «SnapsToDevicePixels», но для позиционирования элементов (т. Е. Округляет все связанные с макетом значения, такие как left, width и т. Д., Тогда как SnapsToDevicePixels привязывает макет к пикселям на экране при рендеринге.)

M

...