10 / 10 / 1
Регистрация: 09.04.2010
Сообщений: 141
|
||||||
1 | ||||||
[C++] 24-битные BMP17.01.2012, 23:21. Показов 2979. Ответов 30
Метки нет (Все метки)
Программа не хочет кодировать 24-битные BMP. Под кодированием я понимаю разбитие изображение на квадраты по 10 пикселей (в программе - по 10 байтов, но это не особо существенно потому, что само изображение выходное открываться не хочет), при котором сначала квадраты перемешиваются по вертикали, а потом и по горизонтали. Пример,
1 6 11 16 2 7 12 17 3 8 13 18 => 4 9 14 19 5 10 15 20 5 6 15 16 4 7 14 17 3 8 13 18 => 2 9 12 19 1 10 11 20 16 15 6 5 4 7 14 17 18 13 8 3 19 12 9 2 20 11 10 1 P.S. 8-битные битмапы шифруются на ура.
0
|
17.01.2012, 23:21 | |
Ответы с готовыми решениями:
30
Работа с BMP-файлами (класс "8 битное BMP изображение) 64-х и 32-х битные системы 16-битные числа Битные маски |
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
17.01.2012, 23:27 | 2 |
на каком основании вы используете методы класса fstream для доступа к бинарным файлам?
Не по теме: мне кто то уже стучался в личку с подобным. похоже, эпидемия?
0
|
10 / 10 / 1
Регистрация: 09.04.2010
Сообщений: 141
|
|
17.01.2012, 23:34 [ТС] | 3 |
а в чем, собственно, проблема? fstream же все-таки класс (для) файлов и я использую его
Или я что-то пропустил в своем обучении?
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
17.01.2012, 23:38 | 4 |
в том что они не предназначены для работы с двоичными файлами
0
|
10 / 10 / 1
Регистрация: 09.04.2010
Сообщений: 141
|
|
17.01.2012, 23:41 [ТС] | 5 |
Пусть вы правы. А вот вы мне скажите где именно это проявляется в моей программе?
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
||||||
17.01.2012, 23:49 | 6 | |||||
может случится так, что после
дальше не смотрел и проверять ваш алгоритм кодирования как то не горю желанием
0
|
10 / 10 / 1
Регистрация: 09.04.2010
Сообщений: 141
|
||||||
17.01.2012, 23:58 [ТС] | 7 | |||||
Да, но дальше идет строка
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
18.01.2012, 00:06 | 8 |
и что? вы похоже не поняли, что я сказал
означает, что там вполне может быть мусор с точки зрения вашей программы, а значит что и в bmpFileHeader.bfOffBits может быть полная ерунда и так далее в последущих вызовах read/write/seek* и обращениям к этим переменным
0
|
10 / 10 / 1
Регистрация: 09.04.2010
Сообщений: 141
|
|
18.01.2012, 00:14 [ТС] | 9 |
да, вы правы, не до конца понял о чем вы написали. Но я не пойму одного, с какой стати может быть мусор в bmpFileHeader, если указатель вывода стоит вначале, а структура bmpFileHeader у ВСЕХ битмапов одинакова.
---------- Только что проверил на исходном файле - bmpFileHeader считывает нормально, так что дело не в этих строках.
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
18.01.2012, 00:20 | 10 |
да потому что... ох, еще раз
т.е. могут считать из двоичного файла не так как вы ожидаете и не то
0
|
10 / 10 / 1
Регистрация: 09.04.2010
Сообщений: 141
|
|
18.01.2012, 00:22 [ТС] | 11 |
Да и объясните мне пожалуйста, в чем проявляется эта непредназначенность?
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
18.01.2012, 00:22 | 12 |
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
18.01.2012, 00:30 | 13 |
и имейте ввиду, что если в один прекрасный момент у вас что то заработает, то это совсем не значит, что будет работать потом и с другими файлами или при компиляции с другой реализацией стандартной библиотеки
Добавлено через 1 минуту с такого что read/write символьно ориентированные ф-ии и ios::binary этого не отменяет Добавлено через 3 минуты если уж вам нужно реализовать чтение/запись двоичного файла - streambuf в помощь п.с. изучите получше STL IOStreams, дабы не возникало таких проблем
0
|
10 / 10 / 1
Регистрация: 09.04.2010
Сообщений: 141
|
|
18.01.2012, 00:32 [ТС] | 14 |
А ничего, что 1 символ вмещается ровно в 1 байт (ну и, ессно, наоборот) и в hex-редакторах байты показываются символами, а не, допустим, целыми чистами?
ну за этот совет спасибо.
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
18.01.2012, 01:08 | 16 |
не везде и не каждый
для того они и созданы, чтобы можно было смотреть в разных представлениях, но причем тут ф-ии ввода/вывода fstream? или вы утверждаете, что считывание данных из файла этих hex-редакторов написаны с помощью этих ф-ий? Добавлено через 10 минут штудируем ваши ссылки цитаты с первых строк: >> Reads a block of data of n characters >> Writes the block of data pointed by s, with a size of n characters если не удовлетворены найду еще Добавлено через 13 минут не поленился - погуглил нужны еще более веские доводы?
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
18.01.2012, 01:18 | 17 |
Ну так а проблема-то в чём? Слово characters смущает? Если файл открыт, как двоичный, преобразования \n в \r\n не будет, sizeof(char) - единица. По большому счёту эти две функции - аналог fread/fwrite c той только разницей, что указатели на буфер принимают, как char*, а не void* - что это в корне меняет?
Добавлено через 35 секунд Ага... А главное - убедительные... И было бы чудесно просто увидеть наглядный пример проблем, возникающих при чтении/записи двоичных файлов с помощью этих функций...
0
|
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
18.01.2012, 01:24 | 18 |
Не факт... Да и character и тип char не одно и тоже. Хотя на абсолютном большинстве систем _сегодня_ проблем возникнуть не должно.
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
|
18.01.2012, 01:35 | 19 |
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
18.01.2012, 01:52 | 20 |
Ну так функции-то указатели на char принимают.
Да и _завтра_ не должно бы. Многобайтовые символы вряд ли когда char назовут, для них уже wchar_t есть... Это в си-диез char 16-ти битный, так у мелкомягких всё по-своему... Короче, пока ничем не обосновано утверждение на счёт read/write... Добавлено через 13 минут Занимательно, конечно, но тем не менее очень хотелось бы увидеть пример проблемы при чтении двоичных файлов... Не по теме: А в прочем убедили. Стану когда-нибудь на С++ двоичные файлы обрабатывать - буду streambuf использовать... :)
0
|
18.01.2012, 01:52 | |
18.01.2012, 01:52 | |
Помогаю со студенческими работами здесь
20
32-битные регистры в Borland C++ 64 битные типы данных в devC++ Встроенный asm и 64-битные регистры Разделить содержимое файла на 64 битные блоки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |