|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.12.2017, 21:41 | #1 |
Пользователь
Регистрация: 24.11.2017
Сообщений: 11
|
Где ошибка: Изменение размера BMP изображения (язык Си, ВМР, jpeg)
Здравствуйте!
Суть вопроса. Ознакомиться с вводом и выводом файлов (были лекции и семинар); ознакомиться с форматами BMP, GIF, JPEG, PNG (самостоятельно). Выполнить задания: 1. убрать "шум" с изображения BMP; 2. изменить размер изображения BMP; 3. восстановить JPEG изображения. Скажу сразу, самостоятельное изучение форматов BMP, GIF, JPEG, PNG малоэффективно: информации , которая действительно помогла бы - минимум, по большей части какие-то общие фразы непонятные "новичкам". Первое задание с трудом и методом тыка , но сделала. С вторым заданием полная засада. Руки опускаются. Третье даже не представляю как делать. Условие второго задания. Напишите в resize.c под названием resize, которая меняет размер 24-битного несжатого ВМР по коэффициенту n. Ваша программа должна принимать ровно три аргумента командной строки, причем первый (n) должен быть целым числом не более 100, второй - именем файла, который будет изменен, а третий - названием сохраненной версии измененного файла. Понимаю, что есть заголовки BITMAPFILEHEADER, BITMAPINFOHEADER , RGBTRIPLE (которые могут при необходимости меняться). До сих пор не пойму , почему одни данные даются в байтах, а другие в пикселях и как их приводить к единому в рассчетах? Мое решение: 1. проверка правильности ввода аргументов 2. чтение заголовков входного файла рассчеты заголовков и запись в выходной файл 3. чтение входного файла построчно и попиксельно с записью увеличенных значений в выходной файл, учитывая выравнивание и используя изменение текущей позиции во входном файле. К сожалению, мой вариант не дает результата Код:
|
18.12.2017, 21:43 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
18.12.2017, 23:22 | #3 |
Пользователь
Регистрация: 24.11.2017
Сообщений: 11
|
ну, например:
biSizeImage - полный размер изображения в байтах biWidth - ширина в пикселях biHeight - высота в пикселях А почему мой вопрос перенесли из раздела "Помощь студентам"? Мне как раз такая помощь и нужна, потому что сама я не могу найти ошибку в своем коде... |
18.12.2017, 23:29 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Дык а в чем еще размеру изображению быть если не в пикселях?
Сколько байтов занимает 1 пиксель вроде зависит от варианта BMP (обычно 3 или 4, или только 4, не помню, ну или наверно можно просто вычислить biSizeImage /(biWidth*biHeight)). В википедии и т.п. посмотрите что там и как. Вообще у BMP нет какого-то единого формата, есть несколько вариантов, в общем бардак (особенно если вдруг понадобится прозрачность) Это в основном помойка для "Помогите спасите решите мою лабу".
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 18.12.2017 в 23:33. |
18.12.2017, 23:58 | #5 | |
Пользователь
Регистрация: 24.11.2017
Сообщений: 11
|
Цитата:
ой, я как раз из тех, кто роет землю в поисках ответа, а не просит готовое решение. Хотя в том разделе мне быстро помогли. Вы вселяете мне надежду на квалифицированную помощь , спасибо! |
|
19.12.2017, 02:24 | #6 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Я не совсем понял это решение. Разве не нужно пересчитывать растр, делать какую-то интерполяцию? Но даже если Вы хотите просто обрезать/дополнить растр, это ведь не сделано..
Мой совет: сначала разберитесь с преобразованием растров как матриц, а потом уже прикидывайте, как эту матрицу читать/писать при работе с bmp. |
19.12.2017, 21:29 | #7 |
Пользователь
Регистрация: 24.11.2017
Сообщений: 11
|
Именно так. Картинка рассматривается как матрица из пикселей. Посредством цикла из входящего файла считывается линия за линией, пиксель за пикселем ,а потом записывается в выходной файл с учетом коэффициента n.
Код:
Кроме того нашла ошибку в заголовках: при коэффициенте увеличения 1 (т.е. выходной файл такой же как и входной) значения заголовков должны быть неизменны, а у меня они разные. Значит ошибка и в рассчетах размеров. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Изображения BMP и JPEG | OmegaBerkut | C# (си шарп) | 9 | 29.05.2017 13:52 |
Изменение размера изображения | ramsesjol | БД в Delphi | 3 | 12.06.2013 14:36 |
изменение размера изображения | voron.kz | Общие вопросы Delphi | 2 | 06.09.2010 08:15 |
Качественное изменение размера изображения... | Dr. MefistO | Мультимедиа в Delphi | 5 | 15.07.2009 17:22 |
Изменение размера - Сжатие BMP в TImage | Air | Помощь студентам | 2 | 02.03.2008 17:00 |