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

Выравнивающие биты в BMP

01.09.2013, 21:55. Показов 1531. Ответов 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
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
void rangeFilter(BYTE *in,BYTE * out,int w,int h)
{
    
    int k;
    cout<<"  k= ";  
    k=3;//cin>>k; //k параметр рангового фильтра
    cout<<endl;
 
    DWORD matrixDim=3;//getMatrixSize("Enter matrix size ( Number >=3) "); 
    DWORD * matrix = new DWORD [matrixDim * matrixDim]; //матрица апертуры
    DWORD *mPtr=matrix;
    cout<<"Enter aperture elements:"<<endl;
 
    DWORD apertureArraySize=0; //размер апертурного массива для сортировки
    for (DWORD _i =0; _i<matrixDim*matrixDim; )//ввод матрицы
    {
        //cin>>*mPtr;
        *mPtr=1;
        if ((_i++ % matrixDim)==0)       cout<<endl;
 
        if (*mPtr<0)
        {
            cout<<"The number must be >=0"<<endl;
            --_i;
            continue;
        }
        apertureArraySize+=*mPtr;
        mPtr++;     
    }
    if (apertureArraySize==0)
    {
        delete []matrix;
        return;
    }
 
    BYTE * apertureRow=new BYTE[apertureArraySize];
    DWORD halfDim=matrixDim/2;
    DWORD wsize=(halfDim*2+1)*(halfDim*2+1);    
    int nuli=0;
        if ((3*w)%4!=0) nuli=4-(3*w)%4;
 
    for (unsigned y = 0; y < h; ++y)
    {
        for (unsigned x = 0; x < w; ++x)
        {
            if ((y<halfDim)||(y>=(h-halfDim))||(x<halfDim)||(x>=(w-halfDim)))//обработка краев
                continue;
 
            //Обегаем соседние точки и заполняем апертурный ряд
            BYTE * _apertureRow=apertureRow;            
            mPtr=matrix;
            for (int _y=y-halfDim;_y<=y+halfDim;_y++)
            {
                for (int _x=x-halfDim;_x<=x+halfDim;_x++)
                {                   
                    for (unsigned int i=*mPtr;i>0;i--)//заполнение массива без сортировки                 
                        *_apertureRow++=in[(_y) * w + (_x)];
                    
                    mPtr++;
                }
            }
            
            qsort ((void*)(apertureRow), apertureArraySize, sizeof(unsigned char),
                compareUchar); //сортируем апертурный массив
 
            if (abs(apertureRow[k+1]-in[y*w+x]) < (abs(apertureRow[wsize-k]-in[y*w+x])))//
                out[y*(w+nuli)+x]=apertureRow[k+1];
            else
                out[y*(w+nuli)+x]=(apertureRow[wsize-k]);
        }
 
        
    
        for(int i=1;i<=nuli;i++)  out[y*(w+nuli)+w+i]=0;
        
        //for(int i=0;i<=(w+nuli);i++) cout<<i;
        cout<<(w+nuli)<<endl;
        for(int i=0;i<=(w+nuli);i++)  cout<<out[y*w+i];
        cout<<endl;
    }
    delete [] apertureRow;
    delete [] matrix;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2013, 21:55
Ответы с готовыми решениями:

Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат
нужна помощь в битовых операциях.Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести результат.

... В четных байтах числа в двоичной системе переместить нулевые биты в старшие биты, а в нечетных байтах – в младшие ...
Доброго времени суток всем, столкнулся с проблемой по С++,требуется написать программу: которая получает 1)случайное целое типа int,...

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

1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
02.09.2013, 13:00
Цитата Сообщение от laker Посмотреть сообщение
проблема с выравнивающими битами
число байт в строке файла должно быть кратно 4. если это не так, то строка дополняется до нужного размера байтами которые при считывании должны быть пропущены. проверьте есть ли этот момент у вас в коде
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2013, 13:00
Помогаю со студенческими работами здесь

В каждом байте числа обнулить 0-ой и 7-ой биты и сделать единичными 3-ий и 4-ый биты
Надо: Прочитать беззнаковое целое число из стандартного потока ввода и в каждом байте числа обнулить нулевой и седьмой биты и сделать...

Преобразование числа в биты, а затем биты в числа (hex)
Преобразование числа в биты, а затем биты в числа (hex). Заранее спасибо!

Работа с BMP-файлами (класс "8 битное BMP изображение)
Написать класс &quot;8 битное BMP изображение&quot;.Класс должен содержать 3 конструктора: конструктор по умолчанию, конструктор с параметрами и...

Изображение bmp, операция над ним, снова в bmp
Задание состоит в следующем: 1. Перевести изображение в матрицу. 2. Удалить определенные объекты(в матрице). 3. Вывести...

Создание монохромного bmp из одной из 24-х плоскостей 24-битного bmp
Здравствуйте. Стоит задача разбить 24-х битное bmp изображение на 24 плоскости с последующей возможностью генерации 24 монохромных...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru