Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение 24-битных BMP в SDI, Самый простой способ..Очень нужна помощь 
:(
    Опции темы
darkangelmsk
Дата 5.6.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно завтра досдать софтинку, что-то вроде аналоговых часов.
Так вот, дело в том, что задача стоит - отрисовать циферблат и весь интерфейс программки из BMP-файла.
Всё остальное реализовано, помогли реализовать отрисовку, однако так как файл True Color (24 bit) он безумно искажается, зеркально поворачиваетя и уменьшается, я уж не говорю о цветах. Причина тому - я подгружаю картинку из ресурсов. Насколько я понял, максимум там поддерживается BMP 256-цветов

Нашёл несколько исходников, но внедрить их в свой код я по-человечески так и не сумел.
Короче абсолютно ничего не получилось. В таком виде (глючном) сдать не могу.
Очень нужна помощь разбирающихся в данном вопросе людей.
Ниже привожу код отрисовки ресурса Bitmap (IDB_CLOCK) в окно
Код

void CChildWnd::DrawClock(CDC *pDC)
{
    CDC memDC;
    CBitmap memBMP;
    CRect WindowSize;
    GetClientRect(&WindowSize);
    memBMP.CreateCompatibleBitmap(pDC, WindowSize.right, WindowSize.bottom);
    memDC.CreateCompatibleDC(pDC);
    memDC.SelectObject(&memBMP);
    CBrush bgColor(RGB(0,0,0));
    memDC.SelectObject(&bgColor);
    memDC.PatBlt(0, 0, WindowSize.right, WindowSize.bottom, PATCOPY);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
    CBitmap m_Image;
    m_Image.LoadBitmap(IDB_CLOCK);
    BITMAP ImageBMP;
    m_Image.GetBitmap(&ImageBMP);
    CDC ImageDC;
    ImageDC.CreateCompatibleDC(pDC);
    ImageDC.SelectObject(&m_Image);
    memDC.BitBlt(0, 0, ImageBMP.bmWidth, ImageBMP.bmHeight, &ImageDC, 0, 0, SRCCOPY);
////////////////////////////////////////////////////////////////////////////////////////////////////////////
    pDC->BitBlt(0, 0, WindowSize.right, WindowSize.bottom, &memDC, 0, 0, SRCCOPY);

...


Помогите, плиз, переделать это под поддержку 24 бит. Времени очень мало, а все попытки разобраться с готовыми решениями ни к чему не приводят :(
Разрешение у картинки довольно большое - 770х746


Заранее огромное спасибо за помощь!
PM MAIL   Вверх
SenkraD
Дата 5.6.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



darkangelmsk,  загрузи картинку с файла. И, вообще, в ресурсы можно вшить любой файл лишь бы потом уметь с ним работать (тоесть загрузи 32-битную картинку в ресы и грузи как грузил)


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
darkangelmsk
Дата 5.6.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А не подскажете каким образом это сделать? Дело в том, что я вообще не силён в WinAPI, только учусь.
PM MAIL   Вверх
SenkraD
Дата 5.6.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



darkangelmsk, 
1. Правый клин на ResourceView
2. Add Resource
3. Import
4. Даём идентификатор
5. Работаем с ресурсом по индификатору


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
darkangelmsk
Дата 5.6.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я думал, Вы имеете ввиду загрузить с помощью функции какой-то. Дело в том, что я именно так и делал. И вышеописанный код работает именно таким образом, итендификатор Bitmap-ресурса IDB_CLOCK. Однако даже если выставить в свойствах ресурса 24битный цвет, всё равно никакого эффекта: картинка искажается как по цветам, так и по размерам, зеркально переворачивается (flip) и с ней происходит просто какая-то чертовщина. Насколько я понял, нормальная работа с подобной картинкой (24 бит) в качестве ресурса невозможна.
PM MAIL   Вверх
SenkraD
Дата 5.6.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А на счёт функции метод LoadBitmap класса CBitmap может грузить и с файла


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
darkangelmsk
Дата 6.6.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема исчерпана!
Заключалась в том, что я перед этим переопределял систему координат.
Другими словами функция, которая выполнялась перед прорисовкой, всё сбивала.
Поместил её после прорисовки и всё отлично заработало.

Короче весь код, приведённый в первом посте рабочий
PM MAIL   Вверх
Coocky
Дата 19.6.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(darkangelmsk @  5.6.2007,  11:46 Найти цитируемый пост)
 Причина тому - я подгружаю картинку из ресурсов. Насколько я понял, максимум там поддерживается BMP 256-цветов

Чушь smile) 
 Максимум там поддерживается TrueColor smile


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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