Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Работа прорамы под разными ОС


Автор: Nastya 11.9.2003, 20:47
VC++ 6.0
Программа компилировалась и прекрасно работает в windows 98.
Там есть кусочек, где считывается информация из *.bmp через LoadImage и выводится на экран. Все работате

Эта же программа, запущенная из Windows Xp или 2000 показывает картинки с гараздо меньшим количеством цветов (этак 256 вместо приличного труеколора).

Почему?
Причем, картинка загруженная из ресурсов и отображенная также работает без проблем.

Автор: Gorbatovsky 12.9.2003, 09:01
Я думаю, что это функция LoadImage или та, которая выводит на экран не корректно работают с цветом.

Автор: Nastya 12.9.2003, 09:45
Я подозреваю, что это все-таки StrechBlt, может кто подскажет чем ее можно заменить

Автор: Baa 12.9.2003, 09:53
А обязательно масштабирование картинки? Попробуй переносить другими функциями, типа BitBlt и т.д.
Хотя, как мне кажется, проблема не в этом...

Автор: Nastya 12.9.2003, 10:52
Да, маштабирование обязательно.
Если не в этом, то в чем?

Автор: DENNN 12.9.2003, 11:54
Возможно при отображении используестя режим не trueColor, а индексированные цвета?

Автор: mr.DUDA 12.9.2003, 17:09
Цитата
Возможно при отображении используестя режим не trueColor, а индексированные цвета?

Тогда можно пробовать получить текущую палитру с контекста, и по ней определять, индексированные цвета или нет.

ИМХО, лучше было бы использовать COM-объект IPicture (есть во всех виндах, и прекрасно работает, используется самой ОС для открытия, отображения и сохранения всяких BMP, GIF, JPEG'ов; отлично документирован в MSDN).

Автор: Nastya 12.9.2003, 17:51
Дело точно в StrechBlt, когда я вызываю эту функцию, но при этом картинку не растягиваю, а отображаю 1:1 все нормально (следовательно файл прочитался нормально и HBITMAP хранит все цвета как положено), а при растягивании или сжатии происходит искажение.
Опять вопрос почему, и как с этим пборотся

Автор: DENNN 13.9.2003, 13:05
Тогда приведи последний параметр StretchBlt (DWORD dwRop) - видимо нужно заменить его на другой, чтоб указать режим вычисления получающегося цвета. Кроме того посмотри справку по функциям SetStretchBltMode, MaskBlt
и команду MAKEROP4 - думаю лишним не будет.

Автор: Nastya 14.9.2003, 17:37
Все разабралась,
SetStrechBltMode(HALFTONE);
Спасибо DENNN, но я уже добралась до этого сама, кстати при таком режиме скорость отображения падает, так что прийдется еще помудрить над этим smile.gif

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