Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
feofun
0 / 0 / 0
Регистрация: 10.11.2014
Сообщений: 19
#1

Работа с пикселями, побитовое копирование - C++

02.02.2015, 15:01. Просмотров 737. Ответов 4
Метки нет (Все метки)

**Задание: Написать программу, осуществляющую побитовое копирование из одного изображения в другое. Изображение открывается через диалог открытия файла с расширением *.bmp. Копированию подлежит только одна из составляющих цвета (красная-зелёная-синяя).

Может кто что-нибудь подсказать по этой программе? Нигде ничего подобного не нашел. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2015, 15:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с пикселями, побитовое копирование (C++):

Полное (побитовое) копирование объекта одной строчкой кода. не ссылки
Добрый день, подскажите пожалуйста, как быстро и безболезненно можно...

Работа с пикселями
Возможно ли работать с пикселями в С++? Сравнение цветов пикселей требуется ...

Работа с изображением(пикселями!)
Привет всем. Целый день в интернете не могу найти как же в С++ работать с...

Побитовое копирование double
Доброго времени суток! Преамбула: В целях интеграции Lua в движок C++ пытаюсь...

Побитовое замещение
Не могу что-то догнать. Есть int 0x 00 00 00 00 Как наиболее простым способом...

Побитовое смещение
Здравствуйте, задача така стоит: Хочу сделать циклический побитовой сдвиг...

4
zss
Модератор
Эксперт С++
6959 / 6521 / 4139
Регистрация: 18.12.2011
Сообщений: 17,209
Завершенные тесты: 1
02.02.2015, 16:01 #2
24 битный bmp содержит заголовок файла BITMAPFILEHEADER
C++
1
2
3
4
5
6
7
typedef struct tagBITMAPFILEHEADER { 
  WORD    bfType; 
  DWORD   bfSize; 
  WORD    bfReserved1; 
  WORD    bfReserved2; 
  DWORD   bfOffBits; 
} BITMAPFILEHEADER;
Потом заголовок BITMAPINFOHEDER.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct tagBITMAPINFOHEADER{
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
} BITMAPINFOHEADER;
Их надо пропустить.
А потом идут строки изображения байтами
BRGBRG....BRGxxxx
BRGBRG....BRGxxxx
BRGBRG....BRGxxxx
....
xxxx - это дополнение строки до кратности 8 байтам.
Т.е. Вам надо брать каждый третий байт с учетом длины строки.
0
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
02.02.2015, 16:31 #3
Функция загрузки BMP24
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
int     image_load(FILE* file_handler, Image* image) {
 
    int result;
    uint32_t delta = 0;
    uint32_t i = 0;
 
    BMPHeader bmp_header;
    Size2i size = {0, 0};
    
    result = fread(&bmp_header, sizeof(BMPHeader), 1, file_handler);
    if( result != 1 ) {
        fwprintf_s(stderr, L"Unexpected end of file\n");
        return 0;
    }
    
    if(
        bmp_header.sig[0] != 'B'
        ||
        bmp_header.sig[1] != 'M'
        ) {
 
        fwprintf_s(stderr, L"Thus file probably not bitmap image\n");
        return 0;
 
    }
 
    if( bmp_header.bit_per_pix != 24 )
        fwprintf_s(stderr, L"This format is unsupported, BMP24 only\n");
 
    size.height = bmp_header.height;
    size.width = bmp_header.width;
 
    if( !image_mem_alloc(image, size) ) {
        fwprintf_s(stderr, L"Malloc return NULL\n");
        return 0;
    }
 
    image->size = size;
 
    delta = _0(size.width);
 
    rewind(file_handler);
    fseek(file_handler, bmp_header.ptr_to_data, SEEK_CUR);
 
    for( i = 0; i < size.height; i++ ) {
 
        fread(
            &(image->matrix_ptr[ i * size.width ]),
            sizeof(BGRComponents),
            size.width,
            file_handler
            );
 
        fseek(file_handler, (int)delta, SEEK_CUR);
 
    }
 
    fclose(file_handler);
 
    return 1;
 
}
Функция копирования
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
int     image_clone(Image* dst, Image* src) {
 
    Size2i i = {0, 0};
 
    if( !image_mem_alloc(dst, src->size) ) return 0;
 
    for( i.width = 0; i.width < src->size.width; i.width++ ) {
 
        for( i.height = 0; i.height < src->size.height; i.height++ ) {
 
            image_write_at(
                dst,
                image_read_at( src, i.width, i.height ),
                i.width,
                i.height
                );
 
        }
 
    }
 
    return 0;
 
}
Остальной код с описанием лежит здесь.
Непонятно, что значит "Копированию подлежит только одна из составляющих цвета (красная-зелёная-синяя)". А что делать с остальными компонентами? Заполнить их конкретным цветом? И зачем их побитово копировать?
1
feofun
0 / 0 / 0
Регистрация: 10.11.2014
Сообщений: 19
02.02.2015, 18:49  [ТС] #4
не могу понять как фото залить сюда,показал бы что должно получиться.
0
zss
Модератор
Эксперт С++
6959 / 6521 / 4139
Регистрация: 18.12.2011
Сообщений: 17,209
Завершенные тесты: 1
02.02.2015, 19:12 #5
Цитата Сообщение от feofun Посмотреть сообщение
как фото залить сюда
Расширенный режим->Управление вложениями.
0
02.02.2015, 19:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2015, 19:12
Привет! Вот еще темы с решениями:

Побитовое вычитание
Здравствуйте. Задача сложить переменные, содержащих 2 машинных слова, используя...

Побитовое сравнение
Дан массив с десятичными числами, как сравнить (2ой,3ий,4ый и т.д.) бит 7...

побитовое увеличение
Здравствуйте уважаемые пользователи. Это моя первая тема. Собственно суда я...

Побитовое чтение
Есть файл видео и мне известна его структура. Например структура следующая:...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru