Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с bitmap изображениями в mfc

448
08 июля 2005 года
Mr. API
105 / / 20.06.2000
Здравствуйте. Сразу признаю, что с MFC знаком плохо, поэтому и обращаюсь в форум. Я создаю диалоговое mfc приложение, и мне необходимо загрузить bmp картинку в двумерный массив, произвести некоторую обработку изображения и вывести его в диалог. Интересует пример загрузки в 2d массив.

Спасибо.
406
09 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Mr. API
Здравствуйте. Сразу признаю, что с MFC знаком плохо, поэтому и обращаюсь в форум. Я создаю диалоговое mfc приложение, и мне необходимо загрузить bmp картинку в двумерный массив, произвести некоторую обработку изображения и вывести его в диалог. Интересует пример загрузки в 2d массив.

Спасибо.



Используй функцию CreateDIBSection,читай MSDN

448
09 июля 2005 года
Mr. API
105 / / 20.06.2000
Цитата:
Originally posted by vitaly2003s
Используй функцию CreateDIBSection,читай MSDN


Хотелось бы все-таки пример.

406
09 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Mr. API
Хотелось бы все-таки пример.



int nweiDst=400; //ширина картинки в пикселях
int nheiDst=400; //высота картинки в пикселях
DWORD *arb; //Наш 2-х мерный массив котрый получится будет действителен после вызова CreateDIBSection и будет размером nweiDst на nheiDst

HWND hwdesc=GetDesktopWindow();
HDC hdesc=GetDC(hwdesc);
HDC hdc=CreateCompatibleDC(hdesc); //создаем основной контекст для прорисовки
ReleaseDC(hdesc,hwdesc);

BITMAPINFO bmi;
ZeroMemory(&bmi,sizeof(BITMAPINFO));
bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth=nweiDst;
bmi.bmiHeader.biHeight=-nheiDst;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=32;
bmi.bmiHeader.biCompression=BI_RGB;
HBITMAP hbm;
hbm=CreateDIBSection(hdc,&bmi,DIB_RGB_COLORS,(VOID**)&arb,0,0);
SelectObject(hdc,hbm);

//теперь кроме контекста доступен и 2-х мерный массив байтов arb

448
10 июля 2005 года
Mr. API
105 / / 20.06.2000
Цитата:
Originally posted by vitaly2003s
int nweiDst=400; //ширина картинки в пикселях
int nheiDst=400; //высота картинки в пикселях
DWORD *arb; //Наш 2-х мерный массив котрый получится будет действителен после вызова CreateDIBSection и будет размером nweiDst на nheiDst

HWND hwdesc=GetDesktopWindow();
HDC hdesc=GetDC(hwdesc);
HDC hdc=CreateCompatibleDC(hdesc); //создаем основной контекст для прорисовки
ReleaseDC(hdesc,hwdesc);

BITMAPINFO bmi;
ZeroMemory(&bmi,sizeof(BITMAPINFO));
bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth=nweiDst;
bmi.bmiHeader.biHeight=-nheiDst;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=32;
bmi.bmiHeader.biCompression=BI_RGB;
HBITMAP hbm;
hbm=CreateDIBSection(hdc,&bmi,DIB_RGB_COLORS,(VOID**)&arb,0,0);
SelectObject(hdc,hbm);

//теперь кроме контекста доступен и 2-х мерный массив байтов arb


Это конечно хорошо, но задача не создать изображения, а открыть уже существующие.

406
10 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by Mr. API
Это конечно хорошо, но задача не создать изображения, а открыть уже существующие.


Ну делаеш тоже самое что и выше,только ширину и высоту выбираеш с размер твоей картинки которую ты хочеш загрузить,затем грузиш картинку к примеру функцией LoadImage (здесь можно узнать и размер картинки). теперь у тя есть хэндл на картинку,блитиш его на только что созданную. Вот и все теперь 2-х мерный массив содержит нужную те картинку.

HBITMAP hbmn = (HBITMAP) LoadImage(0,"c:\\decrypt.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE | LR_DEFAULTSIZE);
BITMAP bm;
GetObject(hbmn,sizeof(bm),(LPVOID)&bm);

int nweiDst=bm.bmWidth; //ширина картинки в пикселях
int nheiDst=bm.bmHeight; //высота картинки в пикселях
DWORD *arb; //Наш 2-х мерный массив котрый получится будет действителен после вызова CreateDIBSection и будет размером nweiDst на nheiDst

HWND hwdesc=GetDesktopWindow();
HDC hdesc=GetDC(hwdesc);
HDC hdc=CreateCompatibleDC(hdesc); //создаем основной контекст для прорисовки
HDC hdct=CreateCompatibleDC(hdesc); //создаем временный контекст
ReleaseDC(hwdesc,hdesc);
SelectObject(hdct,hbmn);


BITMAPINFO bmi;
ZeroMemory(&bmi,sizeof(BITMAPINFO));
bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth=nweiDst;
bmi.bmiHeader.biHeight=-nheiDst;
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=32;
bmi.bmiHeader.biCompression=BI_RGB;
HBITMAP hbm;
hbm=CreateDIBSection(hdc,&bmi,DIB_RGB_COLORS,(VOID**)&arb,0,0);
SelectObject(hdc,hbm);
BitBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hdct,0,0,SRCCOPY);
DeleteDC(hdct);
DeleteObject(hbmn);

//теперь тебе доступен hdc,arb и hbm. можеш выводить либо просто через hdc либо напрямую писать в arb

448
10 июля 2005 года
Mr. API
105 / / 20.06.2000
Спасибо. Роюсь в MSDN, вроде начал понимаать, что к чему. И последнее. Как Bitmap связать с каким-нмибудь DC чтобы, рисовать на bitmap линии и т. д.
430
10 июля 2005 года
craftyfox
157 / / 20.02.2000
Цитата:
Originally posted by Mr. API
Спасибо. Роюсь в MSDN, вроде начал понимаать, что к чему. И последнее. Как Bitmap связать с каким-нмибудь DC чтобы, рисовать на bitmap линии и т. д.


На этот вопрос тебе уже ответили в предыдущих постах :

Цитата:
Originally posted by vitaly2003s
HWND hwdesc=GetDesktopWindow();
HDC hdesc=GetDC(hwdesc);
HDC hdc=CreateCompatibleDC(hdesc); //создаем основной контекст для прорисовки
HDC hdct=CreateCompatibleDC(hdesc); //создаем временный контекст
ReleaseDC(hwdesc,hdesc);
SelectObject(hdct,hbmn);

406
11 июля 2005 года
vitaly2003s
481 / / 27.07.2004
Используй SelectObject
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог