Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод bmp файла, как??? :) 
:(
    Опции темы
MacTep
Дата 15.5.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Привет! Помогите с вопросом: как вывести на экран bmp файл. Работаю в Visual Studio 2003 .NET Проект - Win32 Project. Заранее спасибо!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Fixin
Дата 15.5.2005, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Как вывести? BitBlt(...). Может ты имеешь ввиду как загрузить?
PM MAIL ICQ   Вверх
MacTep
Дата 16.5.2005, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Цитата
Может ты имеешь ввиду как загрузить?
Ну и как же загрузить? smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Fixin
Дата 16.5.2005, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Код
case WM_ONCREATE:
    hBitmap = LoadImage(NULL,"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
break;
case WM_ONPAINT:
{
    PAINTSTRUCT ps;
    BITMAP Bitmap;
    HDC hdc=BeginPaint(hwnd,&ps); 
    GetObject(hBitmap,sizeof(BITMAP),&Bitmap);
    hCompartibleDC = CreateCompatibleDC(hdc);
    hOldBitmap = SelectObject(hCompartibleDC,hBitmap);
    GetClientRect(hwnd,&Rect);
    BitBlt(hdc,0,0,Rect.right,Rect.bottom,hCompartibleDC,0,0,SRCCOPY);
    SelectObject(hCompartibleDC,hOldBitmap);
    DeleteDC(hCompartibleDC);
    EndPaint(hwnd,&ps);
}
break;

HBITMAP hBitmap объявлена глобально в данном случае.
Есть класс на винапи, чтоб джипеги грузила и гифы тоже. Нужно?

Это сообщение отредактировал(а) Fixin - 16.5.2005, 22:21
PM MAIL ICQ   Вверх
gepard
Дата 17.5.2005, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Грузишь *.bmp файл, затем, имея массив цветов пикселей, выводишь их через CPaintDC на форме, например.


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Fixin
Дата 17.5.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Цитата
выводишь их через CPaintDC
Это уже не ВинАпи.
PM MAIL ICQ   Вверх
MacTep
Дата 17.5.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Цитата
имея массив цветов пикселей
вот именно это мне и нужно получить! Как можно это сделать? Подскажите, плиз! smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Fixin
Дата 17.5.2005, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Цитата
вот именно это мне и нужно получить
С этого начинать надо было. GetPixel используй.
PM MAIL ICQ   Вверх
Fixin
Дата 17.5.2005, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Код
COLORREF Mass[][];
for()
for()
Mass[i][j] = GetPixel(BitmapDC, i, j);

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


Эксперт
****


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

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



Цитата(Fixin @ 17.5.2005, 17:04)
Это уже не ВинАпи.

Может на MFC хотел сказать? smile


--------------------
Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным!
© Я, Берсерк, что значит - Неистовый. 
PM MAIL WWW ICQ   Вверх
Fixin
Дата 18.5.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Да хоть ОВЛ, все равно не Апи. А раздел по !!!Апи!!!
PM MAIL ICQ   Вверх
Дрон
Дата 24.5.2005, 03:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Fixin
Через GetPixel задолбаешься получать smile

Есть какая-то функции GetDIBits или что вроде того... сейчас уже не помню. Правда новичок в ней вряд ли сможет разобраться smile


--------------------
Да. Именно так.
PM   Вверх
Знак
Дата 27.5.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нужно знать как бмп устроен, а с выводм на поток но проблем если есть ссылка на формат BMP киньте и мне.....



--------------------
Ищу 2 файлаowl.tchwindows.tch 
PM MAIL   Вверх
ManiaK
Дата 27.5.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Могу кинуть к понедельнику. Сам выводил, загружал - ничего сложного нет.
PM MAIL WWW   Вверх
ManiaK
Дата 29.5.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Так, сканера под рукой нет, текст с книги под чистую сдирать не охота. Потому пишу сразу алгоритм загрузки.

Итак, строение BMP файла:

BITMAPFILEHEADER bmfh;// 14 байт
BITMAPINFOHEADER bmih;// 40 байт
RGBQUAD aColors[];
BYTE aBitmapBits[];

Теперь отдельно каждую:
Код

typedef struct tagBITMAPFILEHEADER {
    UINT bfType;
    DWORD bfSize;
    UINT bfReserved1;
    UINT bfReserved2;
    DWORD bfOffBits;
} BITMAPFILEHEADER;

bfType - содержит ASCII-символы 'B' и 'M'.
bfSize - размер файла в байтах
bfReserved1, bfReserved2 - не используются.
bfOffBits - байтовое смещение до начала растрового изображения (до начала aBitmapBits).

Эту структуру мы грузим целиком от начала файла и проверяем, чтобы поля согласовывались с действительностью. Следом за ней идёт ещё одна структура:
Код

struct BITMAPINFOHEADER {
    DWORD biSize;// обязан содержать 0x28 - размер структуры


    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
};


Поскольку времени на поиск/перепечать мало, даю текст со своей же статьи про ручную загрузку иконок. Разница в дальнейшем между иконками и BMP файлами только в одном - у BMP нет масочного массива (дополнительное чёрнобелое изображение, которое показывает какие биты рисовать, а какие - нет).

Статья тут.
PM MAIL WWW   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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