Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Opacity и Opacitymask


Автор: Moby 22.10.2008, 13:16
Чем отличаются? В книге не написано а в нете не могу найти. 

Заранее спасибо и сорри за простой вопрос.

Автор: likegift 22.10.2008, 18:06
Цитата(Moby @ 22.10.2008,  13:16)
Чем отличаются? В книге не написано а в нете не могу найти. 

Заранее спасибо и сорри за простой вопрос.

имхо,
Opacity - прозрачность всего элемента.
Opacitymask - прозрачность для части элемента, задаваемая маской.

апд: кстати, с помощью Opacitymask мне понравилось обрезать Textblock-и, которые при размещении на канве теряли свое св-во изменения ширины.

Автор: Kefir 22.10.2008, 23:51
Moby, могу добавить, что очень хорошее объяснение масок дано в http://msdn.microsoft.com/en-us/library/ms743320.aspx

Автор: Moby 30.10.2008, 12:30
Спасибо, надо было сперва читать, эх лень.

А вот такая задача связанная с прозрачностью.

Вот если я загружу рисунок, который из себя представляет белый фон и рандомно разбросанные точки. 

Теперь мне надо что бы этот элемент, Image, был наложен на другой "рисунок", и что бы точки были с прозрачностью, а вот белый фон вообще не был виден. Просто если сделать веь Image прозрачным то тогда и белый фон то же становиьтся прозрачным и ..... короче вот так. smile

Понятно, что если на рисунке у меня один-два-три элемента, к примеру, квадраты, то можно при помощи OpacityMask сделать то что надо, а когда у меня много точек, то что делать?

Короче как рисунки формата gif для форумов, когда там нарисовано что то на белом фоне, а на форуме отображается только то что нарисовано, а фон игнорируется.

Автор: rooks 30.10.2008, 23:44
Код
<Image Width="90" Height="30" Source="someImge1.png">
    <Image.OpacityMask>
        <ImageBrush ImageSource="opacityMask.png"/>
    </Image.OpacityMask>
</Image>

видимо так

Автор: likegift 31.10.2008, 16:41
Цитата(Moby @ 30.10.2008,  15:30)
Спасибо, надо было сперва читать, эх лень.

А вот такая задача связанная с прозрачностью.

Вот если я загружу рисунок, который из себя представляет белый фон и рандомно разбросанные точки. 

Теперь мне надо что бы этот элемент, Image, был наложен на другой "рисунок", и что бы точки были с прозрачностью, а вот белый фон вообще не был виден. Просто если сделать веь Image прозрачным то тогда и белый фон то же становиьтся прозрачным и ..... короче вот так. smile

Понятно, что если на рисунке у меня один-два-три элемента, к примеру, квадраты, то можно при помощи OpacityMask сделать то что надо, а когда у меня много точек, то что делать?

Короче как рисунки формата gif для форумов, когда там нарисовано что то на белом фоне, а на форуме отображается только то что нарисовано, а фон игнорируется.

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

Автор: Moby 1.11.2008, 14:30
Люди добрые, я прошу, объясните теперь как мне сделать следующее.

Вот на GDI+ вот что я делал

Код

private Bitmap image1, image2;

private void CreateBitmaps()
        {
            for (int i = 0; i < 300; i++)
            {
                for (int j = 0; j < 300; j++)
                {
                    if (rnd.Next(1,2) == 1)
                    {
                        image1.SetPixel(i, j, Color.Red);
                        image2.SetPixel(i, j, Color.Blue);
                    }
                }
            }
        }


Как видите я сам создавал этот хаотичный набор точек и "перекидывал" их на БИТМАП, который я использовал как движущийся рисунок.

Как мне вот так же самому в ручную создать БИТМАП в WPF?

Автор: Idsa 1.11.2008, 14:41
Moby, есть несколько способов. Вот самый простой (конвертация BitmapSource в старый-добрый Bitmap): http://blogs.msdn.com/llobo/archive/2007/03/08/bitmapsource-bitmap-interop.aspx

Автор: Moby 1.11.2008, 14:53
А другой способ? Разве нельзя самому вручную как раньше работать с пикселями?

Автор: rooks 1.11.2008, 16:17
2Moby пока нашел только http://www.interact-sw.co.uk/iangblog/2006/03/10/wpfrawpixels, если найдешь другое решение, отпишись

Автор: Idsa 1.11.2008, 20:07
Цитата(Moby @  1.11.2008,  18:53 Найти цитируемый пост)
А другой способ? Разве нельзя самому вручную как раньше работать с пикселями? 

А чем Вам метод, который я указал до этого, - не "как раньше". Там в результате преобразования получается Bitmap, с которым можно работать, как раньше.
Другой способ? Второй способ - работать с WriteableBitmap, третий - создать custom BitmapEffect путем написания шейпера (.NET 3.5 SP1).

Автор: Diksa 14.11.2008, 14:37
Модератор: Сообщение скрыто.

Автор: Kefir 17.11.2008, 11:56
Diksa, 
Модератор: одна тема - один вопрос!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)