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

Ваш аккаунт

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

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

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

Банальный вопрос, но всё же... bitmap

1.8K
02 февраля 2010 года
trivium
128 / / 31.01.2010
Всем привет!
У меня банальный вопрос, давно не работал с VC++, и мне надо считать bitmap.
Как это сделать лучше всего стандартными средствами?
Я нашёл несколько способов в сети, но почему-то они не работают...
Надо считать его и запихнуть в контекст устройства по hDC, и например растянуть на всё окно. Ну или считать в 2-х мерную матрицу int'овую.
Буду очень благодарен!
1.8K
02 февраля 2010 года
trivium
128 / / 31.01.2010



спасибо, но это через загрузку из ресурсов... а чтобы из любого файла и функции?

1.8K
02 февраля 2010 года
trivium
128 / / 31.01.2010



ну это тоже как бы не то. я пробовал несколько функций, которые низкоуровнего грузят картинку, читают байты, а потом кладут в контекст устройства или в 2D массив.

11
02 февраля 2010 года
oxotnik333
2.9K / / 03.08.2007
что нада то? я ж не драйвер между пользователем и гуглом... более четкие рамки задачи обозначь.
1.8K
02 февраля 2010 года
trivium
128 / / 31.01.2010
Цитата: oxotnik333
что нада то? я ж не драйвер между пользователем и гуглом... более четкие рамки задачи обозначь.



ну я ж говорю именно функция, которая читает bmp файл, выкусывает массив из файла и запихивает в DC или в 2D массив, но именно код самописной функции, что она делает внутри, а LoadImage это стандартная функция.

87
02 февраля 2010 года
Kogrom
2.7K / / 02.02.2008
С Win32 API некоторое время не возился, могу немного врать, но вроде как-то так:

1. Получаем hBitmap = (HBITMAP)LoadImage(...);
2. Делаем дескриптор DC для картинки:

hBmpDC = CreateCompatibleDC(hDC);
SelectObject(hBmpDC, hBitmap);

где hDC - дескриптор DC окна

3. Копируем один DC в другой с помощью BitBlt или StretchBlt.
4. Удаляем всякий мусор из дескрипторов.
1.8K
02 февраля 2010 года
trivium
128 / / 31.01.2010
Цитата: Kogrom
С Win32 API некоторое время не возился, могу немного врать, но вроде как-то так:

1. Получаем hBitmap = (HBITMAP)LoadImage(...);
2. Делаем дескриптор DC для картинки:

hBmpDC = CreateCompatibleDC(hDC);
SelectObject(hBmpDC, hBitmap);

где hDC - дескриптор DC окна

3. Копируем один DC в другой с помощью BitBlt или StretchBlt.
4. Удаляем всякий мусор из дескрипторов.



а можно из этого как-то в результате матрицу получить?

87
02 февраля 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: trivium
а можно из этого как-то в результате матрицу получить?



Теоретически. Как-то так:

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

1.8K
02 февраля 2010 года
trivium
128 / / 31.01.2010
Цитата: Kogrom
Теоретически. Как-то так:

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?

87
02 февраля 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: trivium
а как такой массив по сети лучше передать? или лучше передавать весь bitmap?



Ну, вначале требовалось вывести изображение в окно. Потому пошли по такому пути. Для передачи и копирования подойдут обычные операции для двоичных файлов. Тут уже другие подходы могут применяться.

8.2K
02 февраля 2010 года
bagie2
299 / / 26.10.2008
наверное по сети лучше данные сжимать :), причем в таком случае проще всего посылать весь файл. а так я бы предложил использовать GetDIBits для получение и SetDIBits для воссоздания битмапа.
1.8K
05 февраля 2010 года
trivium
128 / / 31.01.2010
Цитата: Kogrom
С Win32 API некоторое время не возился, могу немного врать, но вроде как-то так:

1. Получаем hBitmap = (HBITMAP)LoadImage(...);
2. Делаем дескриптор DC для картинки:

hBmpDC = CreateCompatibleDC(hDC);
SelectObject(hBmpDC, hBitmap);

где hDC - дескриптор DC окна

3. Копируем один DC в другой с помощью BitBlt или StretchBlt.
4. Удаляем всякий мусор из дескрипторов.



LoadImage просит первым параметром hInstance. А как он получается я забыл? Вроде как GetInstance, GetCurrentInstance или как-то так, но точно не помню, никто не знает?

87
05 февраля 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: trivium
LoadImage просит первым параметром hInstance. А как он получается я забыл? Вроде как GetInstance, GetCurrentInstance или как-то так, но точно не помню, никто не знает?



Тему надо перенести в раздел "Студенты" или в "Win API"...

hInstance передается в главную функцию WinMain. Кроме того, можно попытаться добыть как-то так:

HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL);

Но тут есть тонкости с использованием процессов, динамических библиотек, если мне не изменяет память.

1.8K
05 февраля 2010 года
trivium
128 / / 31.01.2010
Цитата: Kogrom
Тему надо перенести в раздел "Студенты" или в "Win API"...

hInstance передается в главную функцию WinMain. Кроме того, можно попытаться добыть как-то так:

HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL);

Но тут есть тонкости с использованием процессов, динамических библиотек, если мне не изменяет память.



та при чём здесь студенты? я просто в студии года 4 не писал вообще...
то в WinMain, а я в MFC...
100 раз получал это, но забыл как функция называется...

87
05 февраля 2010 года
Kogrom
2.7K / / 02.02.2008
Цитата: trivium
та при чём здесь студенты? я просто в студии года 4 не писал вообще...



Дело не в авторе темы, а в теме. Она явно не в том разделе. Если бы её разместили правильно, то ответы были бы более точные и получены быстрее.

Например, про MFC ранее не говорилось вроде бы. Тут явно напрашивается перенос в "Microsoft Visual C++".

1.8K
05 февраля 2010 года
trivium
128 / / 31.01.2010
Цитата: Kogrom
Дело не в авторе темы, а в теме. Она явно не в том разделе. Если бы её разместили правильно, то ответы были бы более точные и получены быстрее.

Например, про MFC ранее не говорилось вроде бы. Тут явно напрашивается перенос в "Microsoft Visual C++".



ну да, я хотел про С++ и первой увидел этот раздел...
потом уже увидел шо есть про MVC++...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог