Банальный вопрос, но всё же... bitmap
У меня банальный вопрос, давно не работал с VC++, и мне надо считать bitmap.
Как это сделать лучше всего стандартными средствами?
Я нашёл несколько способов в сети, но почему-то они не работают...
Надо считать его и запихнуть в контекст устройства по hDC, и например растянуть на всё окно. Ну или считать в 2-х мерную матрицу int'овую.
Буду очень благодарен!
спасибо, но это через загрузку из ресурсов... а чтобы из любого файла и функции?
ну это тоже как бы не то. я пробовал несколько функций, которые низкоуровнего грузят картинку, читают байты, а потом кладут в контекст устройства или в 2D массив.
ну я ж говорю именно функция, которая читает bmp файл, выкусывает массив из файла и запихивает в DC или в 2D массив, но именно код самописной функции, что она делает внутри, а LoadImage это стандартная функция.
1. Получаем hBitmap = (HBITMAP)LoadImage(...);
2. Делаем дескриптор DC для картинки:
hBmpDC = CreateCompatibleDC(hDC);
SelectObject(hBmpDC, hBitmap);
где hDC - дескриптор DC окна
3. Копируем один DC в другой с помощью BitBlt или StretchBlt.
4. Удаляем всякий мусор из дескрипторов.
1. Получаем hBitmap = (HBITMAP)LoadImage(...);
2. Делаем дескриптор DC для картинки:
hBmpDC = CreateCompatibleDC(hDC);
SelectObject(hBmpDC, hBitmap);
где hDC - дескриптор DC окна
3. Копируем один DC в другой с помощью BitBlt или StretchBlt.
4. Удаляем всякий мусор из дескрипторов.
а можно из этого как-то в результате матрицу получить?
Теоретически. Как-то так:
BITMAP bm;
GetObject(hBitmap, sizeof(BITMAP), &bm);
И потом из структуры bm смотрим массив, на который указывает её составляющая bmBits, учитывая размеры bmWidth, bmHeight из неё же.
Описание структуры тут:
http://msdn.microsoft.com/en-us/library/k1sf4cx2(VS.100).aspx
ну и тут рассуждают:
http://forum.vingrad.ru/act-ST/f-92/t-245152.html
BITMAP bm;
GetObject(hBitmap, sizeof(BITMAP), &bm);
И потом из структуры bm смотрим массив, на который указывает её составляющая bmBits, учитывая размеры bmWidth, bmHeight из неё же.
Описание структуры тут:
http://msdn.microsoft.com/en-us/library/k1sf4cx2(VS.100).aspx
ну и тут рассуждают:
http://forum.vingrad.ru/act-ST/f-92/t-245152.html
а как такой массив по сети лучше передать? или лучше передавать весь bitmap?
Ну, вначале требовалось вывести изображение в окно. Потому пошли по такому пути. Для передачи и копирования подойдут обычные операции для двоичных файлов. Тут уже другие подходы могут применяться.
1. Получаем hBitmap = (HBITMAP)LoadImage(...);
2. Делаем дескриптор DC для картинки:
hBmpDC = CreateCompatibleDC(hDC);
SelectObject(hBmpDC, hBitmap);
где hDC - дескриптор DC окна
3. Копируем один DC в другой с помощью BitBlt или StretchBlt.
4. Удаляем всякий мусор из дескрипторов.
LoadImage просит первым параметром hInstance. А как он получается я забыл? Вроде как GetInstance, GetCurrentInstance или как-то так, но точно не помню, никто не знает?
Тему надо перенести в раздел "Студенты" или в "Win API"...
hInstance передается в главную функцию WinMain. Кроме того, можно попытаться добыть как-то так:
HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL);
Но тут есть тонкости с использованием процессов, динамических библиотек, если мне не изменяет память.
hInstance передается в главную функцию WinMain. Кроме того, можно попытаться добыть как-то так:
HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL);
Но тут есть тонкости с использованием процессов, динамических библиотек, если мне не изменяет память.
та при чём здесь студенты? я просто в студии года 4 не писал вообще...
то в WinMain, а я в MFC...
100 раз получал это, но забыл как функция называется...
Дело не в авторе темы, а в теме. Она явно не в том разделе. Если бы её разместили правильно, то ответы были бы более точные и получены быстрее.
Например, про MFC ранее не говорилось вроде бы. Тут явно напрашивается перенос в "Microsoft Visual C++".
Например, про MFC ранее не говорилось вроде бы. Тут явно напрашивается перенос в "Microsoft Visual C++".
ну да, я хотел про С++ и первой увидел этот раздел...
потом уже увидел шо есть про MVC++...