![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ivan__ |
|
|||
|
Unregistered |
как сохраниь в графический файл (например bmp) содержимое из контекста памяти (графику)?
|
|||
|
||||
| bavc |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 14.8.2002 Репутация: нет Всего: нет |
Есть книга форматы графических файлов толстенная там про все есть но если хочешь могу формат bmp скинуть. А есть еще спец. компонентики в Билдере напрмер.
|
|||
|
||||
| ivan__ |
|
|||
|
Unregistered |
||||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Может поможет =)
HANDLE hFile = CreateFile ("c:\\test.bmp", GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL); BITMAPFILEHEADER bmFileHeader; DWORD dwNumberOfBytesRead = 0; ReadFile (hFile, (void*)&bmFileHeader, sizeof (bmFileHeader), &dwNumberOfBytesRead, NULL); if (bmFileHeader.bfType != 0x4d42) { ::MessageBox (NULL, "Это не файл растра", "Error", NULL); ::CloseHandle (hFile); } else { DWORD fileLength = GetFileSize (hFile, NULL); DWORD dibSize = fileLength - sizeof (bmFileHeader); #define GlobalAllocP(flags,cb)(GlobalLock(GlobalAlloc((flags),(cb)))); BYTE* pDib = (BYTE*) GlobalAllocP (GMEM_MOVEABLE, dibSize); ReadFile (hFile, (void*)pDib, dibSize, &dwNumberOfBytesRead, NULL); CloseHandle (hFile); LPBITMAPINFO pBmInfo = (LPBITMAPINFO) pDib; LPBITMAPINFOHEADER pBmInfoHeader = (LPBITMAPINFOHEADER) pDib; HANDLE hFile1 = CreateFile ("c:\\test1.bmp", GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL); DWORD dwNumberOfBytesWrite = 0; WriteFile (hFile1, (void*) &bmFileHeader, sizeof(bmFileHeader), &dwNumberOfBytesWrite, NULL); WriteFile (hFile1, (void*) pDib, dibSize, &dwNumberOfBytesWrite, NULL); CloseHandle (hFile1); GlobalFree (pBmInfo); } -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| ivan__ |
|
|||
|
Unregistered |
Baa, это ты привел пример того, как прочитать данные из одного графического файла и записать их в другой граф. файл, то есть по сути, просто копирование.
а если я самостоятельно создаю контекст памяти, что-то вывожу туда, например: ... CClientDC dc(this); dc.SetPixel(0,0,RGB(255,255,255)); dc.Rectangle(1,1,100,100); ... ну и так далее, то как потом все то, что нарисовалось в контексте dc, сохранить в файле bmp? |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Учитывая то, что я тебе написал и это: http://www.codeguru.com/bitmap/window_to_file.shtml
должен разобраться А вообще, можно было зайти на наш любимый codeguru скажем сюда: http://www.codeguru.com/bitmap/index.shtml -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| oldm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.5.2004 Репутация: нет Всего: нет |
Baa
Воспользовался частью твоего кода. Хотел в своей программе с его помощью узнать ширину и высоту bmpфайла так вот pBmInfoHeader->biWidth и pBmInfoHeader->biHeight выдали мне совсем не то, что должно быть. Не подскажешь в чём тут дело. А вообще возможно ли считывать не весь DIB, как ты это делаешь, а только его BITMAPINFOHEADER. Спасибо за внимание. Это сообщение отредактировал(а) oldm - 13.7.2004, 01:33 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
подскажу
можно. в этом случае нужно считывать sizeof(BITMAPINFOHEADER) байт -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| oldm |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.5.2004 Репутация: нет Всего: нет |
C этим вроде разобрался - спасибо hunter
Маленький вопрос по сохранению. Сохраняю DIB созданный с помощью CreateDIBSection разрешение DIBа 24 бит/пиксел.
buffer - массив битов изображения info - структура получаемая мной сразу после создания DIBа (GetObject(bmp/*DIB тот самый*/, sizeof(BITMAP), &info) bmi - структура BITMAPINFO. всё это члены моего класса. Во общем что то сохраняется, но все просмотрщики гр. файл ругаются на неизвестный формат или просто просмотр невозможен. Подскажите где туплю. Cтруктура BITMAPINFOHEADER заполнена так
Это сообщение отредактировал(а) oldm - 13.7.2004, 18:23 |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
попробуй в тип записать просто 0x424D ( или наоборот
+ возможно опять проблема с выравниванием ( для проверки открой свой файл в любом hex-просмоторщике ( far ) ) -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| oldm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 4.5.2004 Репутация: нет Всего: нет |
Ну а какие пути её решения. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
такие же как в моем посте
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |