![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Всем доброго дня!
Уважемые программисты, подскажите как сохранить изображение в BMP файл из имеющегося битмапа! Если можно примерчик! Или функии для этого! Пишу на WinApi. За ранее благодарю и низко кланяюсь! |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
ZC1989 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 468 Регистрация: 17.7.2006 Где: Нижний Новгород; Россия Репутация: 1 Всего: 1 |
Евгений, а разве fwrite уже не работает?
-------------------- озарение настанет позже, когда поймём больше... (Сo. Stigmata) |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Я имел ввиду как записать эти структуры
BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih; RGBQUAD aColors[]; BYTE aBitmapBits[]; в файл и как их заполнить? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Битмап это тот который в памяти, т.е. DDB? Который создается функциями CreateBitmap, CreateCompatibleBitmap и т.д. ? Или тот который DIB секция? У которого разрешен доступ к битовой карте? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Верно, который создается CreateBitmap!
Добавлено через 8 минут и 21 секунду Я понял что структура файла BMP состоит из следущих структур: BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih; RGBQUAD aColors[]; BYTE aBitmapBits[]; так перед записью в файл их необходимо какимто образом заполнить, каждой переменной своё! Так вот подскажите как это сделать! |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Тогда сначала нужно извлечь битовую карту. А потом последовательно заполнять структуры и писать их, после записи табицы цветов записать битовую карту и выровнять то что получилось на границу 4х байт. Проблема в записи структур в файл? Добавлено через 2 минуты и 59 секунд О значении каждого из полей и о том что туда писать можно подробно прочитать тут. http://forum.vingrad.ru/index.php?show_typ...c=94227&hl= -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Вот я попробовал сделать как понял из прочитанного из книги:
Исправте пожалуйста если чтото напутал! |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
bitinfoh.biBitCount =24; это беспалитровый формат так что bitfileh.bfOffBits =sizeof(BITMAPFILEHEADER)+(sizeof(BITMAPINFOHEADER)*24)+sizeof(RGBQUAD); Абсолютно неверно. Верно будет bitfileh.bfOffBits =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER) дальше fwrite(&mBits,sizeof(mBits),1,File); mBits - это указатель, его размер всегда 4 байта, а нужна длинна массива в байтах fwrite(&hColor,sizeof(hColor),1,File); - это тоже не нужно. Добавлено через 2 минуты и 27 секунд кстати, к тому же fwrite(&mBits,sizeof(mBits),1,File); &mBits - это же указатель на указатель ![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
строка 17: 24-битный битмап не имеет палитры, т.е. массив RGBQUAD писать не нужно
строка 28: fwrite(&mBits,Size,1,File); Это сообщение отредактировал(а) 586 - 20.5.2007, 00:21 |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Что то не пойму, так что надо записывать в файл, только это
fwrite(mBits,Size,1,File); или BITMAPFILEHEADER и BITMAPINFOHEADER структуры тоже надо?
А как узнать размер файла? |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Вроде что то в файл уже записывается но изображение не открывается, посмотрите ещё раз код что тут непраильно, у меня предположение что структуры BITMAPFILEHEADER и BITMAPINFOHEADER заполнены неверно!
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Вроде уже грубых ошибок не видно, кроме отсутствия fclose(File);
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
||||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
строка 22: замени BYTE на RGBTRIPLE, или long Size = Bitmap.bmWidthBytes * Bitmap.bmHeight * sizeof(RGBTRIPLE)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |