Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72

Обработка изображения

04.03.2014, 18:29. Показов 1082. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
for(unsigned long int i = 0; i<c; ++i)
        {
            fread(&tempcolor, 1, sizeof(unsigned char), in);
            if(tempcolor==0)
            {
 
                fwrite(&color, sizeof(color), 1, in);
                fseek(in, 1, SEEK_CUR);
            }
 
        }
Господа программисты, помогите пожалуйста. Не могу разобраться, как сделать. Есть квадратик черного цвета размера 16*16 нарисованный в пейнте и сохраненный в bmp 256 цветов. Нужно цвет этого квадратика заменить на белый(любой другой). Если написать в цикле (с - это размер картинки) просто fwrite без fread, то все работает, а с fread не работает(( Подскажите, пожалуйста, что я не так делаю?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2014, 18:29
Ответы с готовыми решениями:

Ввод/вывод и обработка изображения
Доброго времени суток. Помогите, пожалуйста. Поставили задачу взять 2 кадра (2 изображения формата BMP или JPG) и вычесть одно из...

Обработка матрицы, каждый элемент которой задает яркость пикселя изображения
Матрица, каждый элемент которой является уровнем интенсивности пикселя некоторого изображения, представлена в текстовом файле, адрес...

Обработка изображения
Здравствуйте. В С программировать начал недавно. Необходимо реализовать алгоритм обработки изображения на С++ с использованием только...

8
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
04.03.2014, 18:46
C++
#include <stdio.h>
 
int main()
{
    FILE * file;
    int size;
    unsigned char * data;
    
    file = fopen("black.bmp", "rb");
    fseek(file, 0, SEEK_END);
    size = ftell(file);
    rewind(file);
    
    data = new unsigned char[size];
    fread(data, 1, size, file);
    for(int i = 54; i < size; i++) data[i] = 0xFF;
    fclose(file);
    
    file = fopen("white.bmp", "wb");
    fwrite(data, 1, size, file);
    fclose(file);
    
    delete [] data;
}
Добавлено через 1 минуту
Ой, у меня меняет все изображение на белый.
1
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
04.03.2014, 18:53  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main()
{
    FILE* in;
    in = fopen("kv16bl.bmp","r+b");
     BitMapHeader bh;
     fread(&bh, 1, sizeof(BitMapHeader), in);
    int f = bh.biHeight;
    int color = 255;
    int tempcolor;
 
    unsigned long int c = pow(f,2);
    if(in!=NULL)
    {
        fseek(in, 1078, SEEK_SET);
        for(unsigned long int i = 0; i<c; ++i)
        {
            fread(&tempcolor, 0, sizeof(tempcolor), in);
 
            if(tempcolor==0)
            {
 
                fwrite(&color, sizeof(color), 1, in);
 
            }
 
        }
    }
    fclose(in);
    return 0;
 
}
А что не так именно в моей? просто она должна все делать именно в одном файле

Добавлено через 2 минуты
color и tempcolor не int а unsigned char надо
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
04.03.2014, 19:07
maxim12345, на самом деле bmp - очень плохой формат картинок, у них там размер файла не точно зависит от количества пикселей по ширине и высоте, хотя и считается растровым форматом. Обычно заголовок занимает 54 байта, а данные рисунка ширина * высота * кол-во_байт_на_пиксель, например для 24-битного рисунка 10 на 15 пикселей кол-во байт должно быть 54+10*15*3 = 504, а пейнт создает файл размером 534 байта, спрашивается откуда взялись еще 30 байтов...
1
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
04.03.2014, 19:21  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int main()
{
    FILE* in;
    in = fopen("kv16bl.bmp","r+b");
     BitMapHeader bh;
     fread(&bh, 1, sizeof(BitMapHeader), in);
    int f = bh.biHeight;
    unsigned char color = 254;
    unsigned char tempcolor  ;
 
    unsigned long int c = pow(f,2);
    if(in!=NULL)
    {
        fseek(in, 1078, SEEK_SET);
        for(unsigned long int i = 0; i<c; ++i)
        {
            fread(&tempcolor, 0, sizeof(tempcolor), in);
            fseek(in, -1, SEEK_SET);
 
            if(tempcolor==25)
            {
 
                fwrite(&color, sizeof(color), 1, in);
 
            }
 
        }
 
 
    }
    fclose(in);
    return 0;
 
}
а вот в таком варианте программа перекрашивает квадратик, но только если сообщить переменной tempcolor заранее цвет. получается что fread не считывает цвет сама? что вообще тут не так? помогите, пожалуйста, поправить
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
04.03.2014, 21:07
1.
Цитата Сообщение от maxim12345 Посмотреть сообщение
if(tempcolor==25)
А почему Вы решили, что там должно быть 25?
Яркости в 256 цветной bmp записываются через палитру,
и то, что вы считываете, это не яркрсть, а индекс в этой палитре.
2. Я не знаю, что такое BitMapHeader.
В файл сначала пишется структура BITMAPFILEHEADER,
потом структура BITMAPINFO (содержащая BITMAPINFOHEADER и палитру),
а потом байты индексов, причем, строки выровнены на границу двойного слова.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
04.03.2014, 21:18
Цитата Сообщение от programina Посмотреть сообщение
на самом деле bmp - очень плохой формат картинок, у них там размер файла не точно зависит от количества пикселей по ширине и высоте, хотя и считается растровым форматом. Обычно заголовок занимает 54 байта, а данные рисунка ширина * высота * кол-во_байт_на_пиксель, например для 24-битного рисунка 10 на 15 пикселей кол-во байт должно быть 54+10*15*3 = 504, а пейнт создает файл размером 534 байта, спрашивается откуда взялись еще 30 байтов...
Вопрос даже не в том, что это плохой но простыми подручными средствами не заменишь, а писать свой компрессор (под jpg например) и тешится и время жалко (по крайне мере мне, хотя есть задача где хотелсь бы использовать). А так, Марин, надеюсь что не против что по имени, в BMP не один заголовок, туда еще чуть-чуть мусора понапихать можно если не ошибаюсь
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,859
04.03.2014, 21:22
Цитата Сообщение от programina Посмотреть сообщение
24-битного рисунка 10 на 15 пикселей кол-во байт должно быть 54+10*15*3 = 504,
выравнивания не учитываешь
0
Фрилансер
 Аватар для Black Fregat
3709 / 2082 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
04.03.2014, 22:39
maxim12345, сам в своё время по этим граблям потоптался. На самом деле нельзя сразу после записи делать чтение. Как и наоборот. Эти опреации обязательно должны перемежаться вызовом fseek. Даже если указатель реально не должен перемещаться. Это прямо написано в документации.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2014, 22:39
Помогаю со студенческими работами здесь

Обработка изображения
Добрый день. Есть 2 изображения (jpg): исходник и тот же самый исходник с красным маркером (точка). Нужно определить координаты этой точки....

обработка изображения
дело в следующем. это кусок рабочей программки,которая выводит BMP изображение. теперь нужно перевести его в градации серого и черно-белое....

Обработка изображения
Всем привет! Создаю приложение обработки изображения с помощью фильтров. Столкнулся с такой проблемой: в Pascal.ABC фильтр срабатывает...

Обработка изображения
Здравствуйте, помогите пожалуйста, нужно из некоего изображдения клеток - еритроцитов, вырезать все клетки и по каждой построить...

Обработка изображения
$size = getimagesize($_FILES); $src=imagecreatefromjpeg($_FILES); $znak_hw = getimagesize($host.'/impressions/watermark.png'); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru