powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / BitmapImage после применения DecodePixelWidth изображение становится размытым
8 сообщений из 8, страница 1 из 1
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38759897
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток !

Есть проблема:В BitmapImage после применения DecodePixelWidth изображение становится размытым и очень плохого качества.

Код такой

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 {
                Thread.Sleep(2000);
             
              

                BitmapImage src = new BitmapImage();
                src.CacheOption = BitmapCacheOption.OnLoad;
               
                
                src.BeginInit();
                src.UriSource = new Uri(dir, UriKind.Relative);
                src.DecodePixelWidth = 200;
                src.EndInit();
                src.Freeze();
                bwLoader.ReportProgress(0, src);
            
          
            }



Спасибо.
...
Рейтинг: 0 / 0
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38760228
Фотография @k@DElpher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если поставить
src.DecodePixelWidth = 2000; то будет очень качественным.
А, если src.DecodePixelWidth = 1; то будет один только цвет.
Параметр отвечает за то, сколько места в памяти займет декодированное изображение. Или до какого размера оно сожмется.
Может вы задали 200, а по факту контейнер для изображения 500? И у него Stretch="Uniform". Попробуйте поставить Stretch="None".
...
Рейтинг: 0 / 0
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38760671
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если мне нужно уменьшить размер картинки ? как это сделать.Я думал DecodePixel для этого подходит...
...
Рейтинг: 0 / 0
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38760683
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и еще вопрос
Почему при добавлении такой конструкции (выделено красным) вообще перестает отображаться что-либо

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
          {
               [color=red] Image myImage1 = new Image();
                myImage1.Stretch = Stretch.Fill;
                myImage1.StretchDirection = StretchDirection.Both;[/color]
                Thread.Sleep(2000);
               
                BitmapImage src = new BitmapImage();
                
                src.CacheOption = BitmapCacheOption.None;
                
                src.BeginInit();
                src.UriSource = new Uri(dir, UriKind.Relative);
                src.DecodePixelWidth = 2000;
                
                
                src.CacheOption = BitmapCacheOption.OnLoad;
                src.EndInit();

                src.Freeze();
                
                bwLoader.ReportProgress(0, src);
               [color=red] myImage1.Source = src;
[/color]



            }
...
Рейтинг: 0 / 0
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38761904
Фотография @k@DElpher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DecodePixel вообще можете не задавать. (точнее оно нужно, если экономить память)
Размер изображения определяется в контейнере, которым вы его показываете.
Если это <Image Name="img1" >, то ему
img1.Stretch = Stretch.Uniform; - если нужно сохранять пропорции
img1.Stretch = Stretch.Fill; - изображение растянется или сожмется без сохранения пропорций
Для изменения визуальных размеров:
Код: c#
1.
img1.Width = 100;  или img1.Height= 100; 

при Uniform нужно задать только одно из значений(второе вычисляется пропорционально). При Fill задается оба значения.
---
По второму. Не знаю, куда и чему вы в первом случае рисовали изображение.
Но у вас в одной области видимости (в скобочках) создается
Код: c#
1.
Image myImage1 = new Image(); 


Потом ему присваивается источник изображения:
Код: c#
1.
myImage1.Source = src;



И далее myImage1 никуда не встраивается, нигде не отображается, он просто по завершению метода удаляется из памяти.
...
Рейтинг: 0 / 0
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38762308
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще,изображение у меня грузилось так.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
  private void bwLoader_DoWork(object sender, DoWorkEventArgs e)
        {
            string[] dirs = (string[])e.Argument;
            foreach (var dir in dirs)
            
            {
               
                Thread.Sleep(2000);
               
                BitmapImage src = new BitmapImage();
               
                src.CacheOption = BitmapCacheOption.None;
                
                src.BeginInit();
                src.UriSource = new Uri(dir, UriKind.Relative);
                src.DecodePixelWidth = 2000;
                
                
                src.CacheOption = BitmapCacheOption.OnLoad;
                src.EndInit();
                src.Freeze();
                
                bwLoader.ReportProgress(0, src);
                
                
               
  


            }
        }



Просто если применит Height и Width к BitmapImage src = new BitmapImage(); , то вот что пишет :
Error 2 Property or indexer 'System.Windows.Media.ImageSource.Height' cannot be assigned to -- it is read only
...
Рейтинг: 0 / 0
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38762841
Фотография @k@DElpher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BitmapImage src - это источник изображения, предназначен только для загрузки и передачи его в контейнер для отображения.
Ему нельзя применять src.Height - можно только прочитать.
Сама передача изображения, судя по коду, может происходить только в
Код: c#
1.
bwLoader.ReportProgress(0, src);


Я немного погуглил и нашел, твой прошлый вопрос:
http://www.sql.ru/forum/1116802/backgroundworker-asinhronnyy-potok-kak-vmesto-stroki-sdelat-put
После вызова ReportProgress должно запуститься (или, что у тебя там сейчас):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
 void bwLoader_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (e.UserState is BitmapImage)
            {
                BitmapImage image = e.UserState as BitmapImage;
                mainGrid.Children.Add(new Image() { Source = image, SnapsToDevicePixels = true });
            }
        }


Вот в этой строчке:
Код: c#
1.
2.
3.
 mainGrid.Children.Add(new Image() { Source = image, SnapsToDevicePixels = true });
А конкретно, в:
new Image() { Source = image, SnapsToDevicePixels = true }


Ты и создаешь контейнер для изображения. Вот ему, ты можешь присвоить ширину и высоту. Если она фиксированная, то сойдет так:
Код: c#
1.
new Image() { Source = image, SnapsToDevicePixels = true, Width=200 }
...
Рейтинг: 0 / 0
BitmapImage после применения DecodePixelWidth изображение становится размытым
    #38763438
fuzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@k@DElpher,

Работает !!! Спасибо Вам огромное за помощь и объяснение !!!!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / BitmapImage после применения DecodePixelWidth изображение становится размытым
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]