Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размеры фотографий, Image.GetThumbnailImage Method 
V
    Опции темы
SKrivosein
Дата 28.4.2009, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Такой вопрос, меняю этим методом размеры картинок
Код

Image thumbnail;
......
using (Bitmap bmp = new Bitmap(fileRath))
            {
                Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
                thumbnail = bmp.GetThumbnailImage(sizeX, sizeY, myCallback, IntPtr.Zero);

                thumbnail.Save(saveFile);
            }

всё работает, делает достаточно быстро, качество хорошее, .....аж очень хорошее  smile 
при изменении 1680x1050.jpg = 557kb в 800x600.jpg вес становится 1,04 Mb.
Вопрос: зачем это нужно, как с этим боротся и главное почему это происходит  smile 
-----------------------------------------
Интересно мнение людей с форума, также посылать в Google только конкретно  smile 


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
DVariuS
Дата 29.4.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 10.2.2009
Где: Ukraine

Репутация: 5
Всего: 8



Метод GetThumbnailImage используется для получения миниатюры(thumbnail) изображения, а ресайзить до необходимого размера лучше при помощи DrawImage:
Код

public static Bitmap ResizeBitmap(Bitmap source, int sizeX, int sizeY)
        {
            Bitmap result = new Bitmap(sizeX, sizeY);
            result.MakeTransparent();
            Graphics gr = Graphics.FromImage(result);
            gr.DrawImage(source, 0, 0, sizeX, sizeY);
            gr.Flush();
            return result;
        }


PM MAIL   Вверх
SKrivosein
Дата 29.4.2009, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



В общем то я это занаю (о миниатюрах, DrawImage и т.п.), но почитав по интернету, хотел попробовать, типо качество хорошее.
Ну и задача получать одну фотографию в размерах по возрастающей.
А главный вопрос (я не тупой, просто интересно smile ), почему?


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
DVariuS
Дата 29.4.2009, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 10.2.2009
Где: Ukraine

Репутация: 5
Всего: 8



Насчет качества при наличии встроенного thumbnail:
Цитата

The GetThumbnailImage method works well when the requested thumbnail image has a size of about 120 x 120 pixels. If you request a large thumbnail image (for example, 300 x 300) from an Image that has an embedded thumbnail, there could be a noticeable loss of quality in the thumbnail image. It might be better to scale the main image (instead of scaling the embedded thumbnail) by calling the DrawImage method.


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

Это сообщение отредактировал(а) DVariuS - 29.4.2009, 10:27
PM MAIL   Вверх
SKrivosein
Дата 29.4.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Это тоже читал 
Цитата
It might be better to scale the main image (instead of scaling the embedded thumbnail) by calling the DrawImage method.

 но на форуме кто-то писал другое мнение, а нашем деле всё попробовать надо (кроме наркотиков и извращений  smile )


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
DVariuS
Дата 29.4.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 10.2.2009
Где: Ukraine

Репутация: 5
Всего: 8



Цитата

а нашем деле всё попробовать надо (кроме наркотиков и извращений   ) 

Согласен   smile 

Ну а по теме - попробуй использовать другие перегрузки метода Bitmap.Save(). Может, путем настройки кодека удастся уменьшить размер изображения до адекватного уровня.
Тут пример

З.Ы. Кстати, о качестве: для достижения максимального качества масштабирования при помощи метода DrawImage необходимо установить
Код

gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;



Это сообщение отредактировал(а) DVariuS - 29.4.2009, 10:59
PM MAIL   Вверх
SKrivosein
Дата 29.4.2009, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Спасибо за иформацию.
------------------------------------------------------
Хочу красиво закончить тему, также: исходная картинка "дерево посреди подсолнечников"
user posted image
1680х1050px  557kb JPEG
Результаты сохраняем методом Save()
с настройками по ссылке от DVariuS, с разными уровнями компресии

Код

         ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
         System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
         EncoderParameters myEncoderParameters = new EncoderParameters(1);
...............................

         result.Save(saveFile + ".jpg");

         EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);
         myEncoderParameters.Param[0] = myEncoderParameter;
         result.Save(saveFile + "test1.jpg", jgpEncoder, myEncoderParameters);

         myEncoderParameter = new EncoderParameter(myEncoder, 80L);
         myEncoderParameters.Param[0] = myEncoderParameter;
         result.Save(saveFile + "test2.jpg", jgpEncoder, myEncoderParameters);

         myEncoderParameter = new EncoderParameter(myEncoder, 100L);
         myEncoderParameters.Param[0] = myEncoderParameter;
         result.Save(saveFile + "test3.jpg", jgpEncoder, myEncoderParameters);

Первый метод GetThumbnailImage
ресайз на 200х150
            72,4kb
            4,21kb
            6,99kb
            28,7kb
 ресайз на 800х600
            1,04Mb
            52,6kb
            91,9kb
            402kb
Второй метод  DrawImage
ресайз на 200х150
            75,2kb
            5,5kb
            9,33kb
            34,4kb
 ресайз на 800х600
            1,04Mb
            55,2kb
            97,7kb
            420kb

Результат на глаз практически одинаковый, я бы сказал что первый метод чуть-чуть резче.....
------------------------------------------------------
 smile 

Это сообщение отредактировал(а) SKrivosein - 30.4.2009, 14:16


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.