Класс CPictureEx
От: Олег Быков  
Дата: 15.08.01 18:37
Оценка: 151 (7) +1
Статья:
Класс CPictureEx
Автор(ы): Олег Быков
Дата: 07.08.2001

Класс CPictureEx добавляет в MFC-приложения поддержку изображений
следующих форматов: GIF (в том числе анимированных), JPEG, BMP, WMF, ICO и CUR.


Авторы:
Олег Быков

Аннотация:
Класс CPictureEx добавляет в MFC-приложения поддержку изображений следующих форматов: GIF (в том числе анимированных), JPEG, BMP, WMF, ICO и CUR.
Комментарий
От: Fantasist  
Дата: 04.11.02 16:46
Оценка:
Класс полезный. Однако, хотелось бы добавить в него сериализацию — иногда хочется хранить свою коллекцию картинок, а не коллекцию файлов. Сам я ее добавил не эффективным способом — сохраняя при загрузке картинки сырую область памяти, и потом уже записывая ее в архив. Наверняка можно сделать лучше, но это надо разбираться.
Хотелось бы еще раз уточнить совместимость с Win98
От: VSV  
Дата: 22.05.02 04:55
Оценка:
В Win98 рисунок не изображается, хотя в WinXP всё работает.
Баг с прозрачностью
От: Andrey Fidrya  
Дата: 07.02.02 00:10
Оценка:
Обнаружил мелкий баг, из-за которого на _некоторых_ версиях WinXP вместо указанного цвета фона под прозрачными областями картинки был белый цвет... Проблема в следующей строке (она есть в двух местах компонента):

FillRect(m_hMemDC,&rect,(HBRUSH)(COLOR_WINDOW));

Непонятно каким чудом, но на W9X и Win2K эта строка заливала область rect цветом COLOR_3DFACE!
Но на некоторых версиях WIN_XP вдруг начало заливать белым.
При чем если поменять "(HBRUSH)(COLOR_WINDOW)" на "(HBRUSH)(COLOR_3DFACE)" то заливать будет тоже _белым_ даже на Win2K.
Способ лечения: заменить эту строчку на нечто вроде

HBRUSH br = GetSysColorBrush(COLOR_3DFACE);
FillRect(m_hMemDC, &rect, br);

— стало работать на всех версиях Windows.

Но заливка неанимированных GIF-ов (в анимированных imho заливка фона еще раз происходит непосредственно перед выводом кадра в треде нужным цветом) всегда будет вестись цветом COLOR_3DFACE, поэтому здесь наверное лучше использовать цвет из переменной background...

p.s. Большое спасибо за компонент!
Win95 и CreateWaitableTimer()
От: Михаил А. Русаков https://www.wincatalog.com
Дата: 11.01.02 01:35
Оценка:
Данный класс не будет работать на Win95, даже при IE4, так как в kernrl32.dll нет функции CreateWaitableTimer(). Она появилась несколько позже в Win98, поэтому, так сказать, неполная совместимость.

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

Но может сложиться ситуация, когда будет необходима функциональность для Win95.

Я не призываю автора переписывать класс для совместимости, а просто констатирую факт. Если нужна анимация под Win95 — придется пересмотреть механизм ее реализации.

Для Олег Быков: спасибо за класс. Что называется, easy to use... Даже Bounds Checker только в обном месте ругается, да и то не по делу... :)
WinCatalog — Disk Catalog Software for Windows
Правовые аспекты...
От: Аноним  
Дата: 25.08.01 15:11
Оценка:
А нет проблем с буржуями? Насколько я знаю, для того чтобы использовать гиф некая организация Unisys берет немалые деньги... Или можно их обойти?
Спасибо.
От: raspopov Россия https://www.cherubicsoft.com/
Дата: 16.08.01 18:37
Оценка:
Все работает, правда пришлось подкрутить чуток, что бы выводился GIF с действительно прозрачными областями. В оригинальном CPictureEx прозрачный цвет заменялся цветом COLOR_3DFACE.
Re: Правовые аспекты...
От: Oleg Bykov  
Дата: 28.08.01 08:25
Оценка:
Прошу прощения за косноязычность — просто уже ничего не соображаю. :)
Re: Правовые аспекты...
От: Oleg Bykov  
Дата: 28.08.01 08:23
Оценка:
Насколько я понял, Unisys держит права не на формат GIF, а на использование алгоритма сжатия LZW, который в этом формате используется. В CPictureEx не реализован свой декодер LZW, для этого используется функция WinAPI OleLoadPicture, так что я проблем с показом GIF не вижу.
Re:Спасибо.
От: Oleg Bykov  
Дата: 18.08.01 01:09
Оценка:
Я не совсем понял, о каком прозрачном цвете идет речь — прозрачность в этом классе вообще не планировалась (и, соответственно, не реализована). Для реализации прозрачности нужно знать, что находится под гифом, а это, на мой взгляд, в общем случае задача нетривиальная. В качестве замены прозрачные области GIF'а заливаются предполагаемым цветом фона, на котором лежит картинка (по умолчанию действительно COLOR_3DFACE). Этот цвет можно изменить функцией CPictureEx::SetBkColor(COLORREF), о чем и написано, кстати, в сопроводительной статье.

Не могли бы Вы написать мне подробнее о доработке на e-mail : oleg_bykoff@rsdn.ru ? Если это действительно что-то стоящее, я с удовольствием внесу исправления и упомяну Ваше имя в сопроводительной статье и в комментариях класса.
Re: Класс CPictureEx
От: Аноним  
Дата: 16.08.04 13:58
Оценка:
Здравствуйте, Олег Быков, Вы писали:

ОБ>Статья:



ОБ>Авторы:

ОБ> Олег Быков

ОБ>Аннотация:

ОБ> Класс CPictureEx добавляет в MFC-приложения поддержку изображений следующих форматов: GIF (в том числе анимированных), JPEG, BMP, WMF, ICO и CUR

некорректно выводит interlaced animated gif'ы и animated gif'ы с оптимизацией (удалением неинформативных областей)
можно ли это поправить, если конечно сквозь толщу времен меня услышит многоуважаемый автор?
Re[2]: Класс CPictureEx
От: Аноним  
Дата: 16.08.04 15:39
Оценка:
Последняя версия, взятая с
http://www.codeguru.com/Cpp/G-M/bitmap/article.php/c4879/
тоже несправляется с черезстрочными GIF'ами.. (неправильно выводит последнюю строчку)
Re: Хотелось бы еще раз уточнить совместимость с Win98
От: Sheridan Россия  
Дата: 17.08.04 04:04
Оценка:
Win95 и CreateWaitableTimer()
Автор: Михаил А. Русаков
Дата: 11.01.02
... << RSDN@Home 1.1.4 beta 2 rev. 158>>
Matrix has you...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.