![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Точно! Выше по коду
Значит Bitmap.bmWidthBytes - это число байт в строке а не ее длина.
А вот это уже не верно. Bitmap.bmWidthBytes * Bitmap.bmHeight * sizeof(RGBTRIPLE) будет в 3 раза больше нужного размера. Да и какой смысл использовать RGBTRIPLE, обработки данных на этом этапе нет, только запись в файл, байты как раз точно отражают размер блока данных. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
![]() Size правильно определен: так как Bitmap.bmWidthBytes - это длина строки в байтах (уже выровненная) сорри, не заметил, что еще страница есть. Это сообщение отредактировал(а) zkv - 20.5.2007, 13:56 |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Вот немного переделал, теперь хоть размер сохраняемого файла сходится с исходным. Посмотрите как я передел, но всёравно изображение не открывается.
Это сообщение отредактировал(а) Евгений - 20.5.2007, 21:09 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Была еще одна маленькая ошибочка
bitfileh.bfType =Bitmap.bmType; Bitmap.bmType всегда равна нулю а не сигнатуре битмапа Правильно будет bitfileh.bfType = 0x4D42; Вот как только изменил сразу все заработало
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
zkv |
|
||||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 12 Всего: 92 |
не учитываешь выравнивание строк, может быть ошибка из за этого вылазит тут:
когда не хватает места под растр раньше у тебя правильно было:
А вообще смотри какие значения возвращают функции + GetLastError() юзай |
||||||
|
|||||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Евгений, WinHex лучший друг программиста
![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Alexeis сделал по твоему коду вроде всё ок, только вот при открытии изображения вне моей программы он пишет "Ошибка при построении изображения". Открыл Paint там кракозябли но изображение! Незнаешь в чем дело?
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Если чесно, то функцией GetBitmapBits я ни разу не пользовался и подозреваю, что она работает как-то по другому. Я всегда использовал GetDibBits. Она точно возвращает растр. Если изображение кривое значит не получил битовую карту. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Таки я был прав эта функция работает для совместимости и битмапы больше 64кб видимо ей не по зубам, кроме того я точно вычислил размер буфера данных исходя из документации а не брал его из структуры (там он дан для цвета 32 бита на пиксел)
Вот в итоге получилось так
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Огромное тебе спасибо, Alexeis! Все получилось! Благодаря таким людям и набираешься опыта, разрешишь по всем вопросам обращаться к тебе?
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Неа, мне работать тоже нужно, ну хоть иногда ![]() ![]() -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Всё равно спасибо! Ещё вопросик, не подскажите что собой представляет mBits, это набор цветов или чего? Про хочу попробовать написать программу самму простую шифрования изображений. Это вообще возможно? Если кто-нибудь знает какой-нибудь простой способ шифрования изображений поделитесь!
|
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Матрица пикселей, т.е. набор строк, в которых данные о цвете пикселов расположены слева направо, снизу вверх. Это значит что массив начнется не с первой строки а с последней (правда бывают исключения). Цвет это либо самого его значение (верно для форматов 16, 24, 32 бита на пиксел) либо индекс цвета в палитре (верно для форматов 1, 4, 8 бит на пиксел).
А какая разница что шифровать? Файлы все одинаковые, что звук что графика что текст, просто массив байтов.
В Windows есть CryptoApi. Первая ссылка в гугле http://www.cryptopro.ru/cryptopro/documentation/capi.htm -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
Евгений |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 14.6.2006 Где: г. Невинномысск Репутация: нет Всего: 1 |
Я имею ввиду чтобы изображение зашифровалось потом его открыл, а там место нормальной картинки всякая чушь.
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 7 Всего: 459 |
Евгений, будет не так просто. Размер шифровки может оказаться больше размера исходных данных, потому вероятно прийдеться перед этим графические данные упаковать, например при помощи библиотеки zLib (идет с виндой), а затем уже зашифровать. Если картинка была со смыслом, а не просто рэндом, то она сожмется неплохо. После шифровки размер блока растра должен получиться меньше исходного, потому для записи понадобиться дописать падинг (т.е. баласт).
В MSDN е есть пример использования CryptoApi. Эти методы шифрования проверены и надежны. Т.е. устойчивы при том что алгоритм шифровки/расшифровки известен. http://msdn2.microsoft.com/en-us/library/aa382052.aspx Это сообщение отредактировал(а) Alexeis - 23.5.2007, 09:39 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |