Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массив: Определить наименьший по модулю отрицательный элемент? http://www.cyberforum.ru/cpp-beginners/thread946945.html
В одномерном массиве нудно определить наименьший по модулю отрицательный элемент. Помогите. Весь мозг уже сломал.....
C++ Классы и объекты Такая ситуация: есть кусочек кода, не несущего смысловой нагрузки. while(a < b) а++; где a и b объекты самопального класса сверхбольших чисел. Арифметические операции и операции сравнения... http://www.cyberforum.ru/cpp-beginners/thread946939.html
C++ Самоучитель от Дейтела врет?
Почему в самоучителе по С++ от Дейтела Х, программа, выводящая текст записана так: #include <iostream> int main() { std::cout<< "Welcome\n";
C++ у кого VS2010?
Поделитесь такими файликами. В инете с левого источника боюсь качать. msvcp100.dll msvcr100.dll Находятся они по адресу Program Files\Microsoft Visual Studio...
C++ MinGW Developer Studio http://www.cyberforum.ru/cpp-beginners/thread946904.html
Всем здраствуйте! Просьба! Не кидайте сразу помидорами, если вопрос очень уж глупый))) Я только начинаю разбираться, первые шаги так сказать))) Скачала я среду MinGW Developer Studio, создаю...
C++ Как повернуть матрицу на заданный угол ? Здравствуйте. Мне нужно написать функцию, которая поворачивала бы изображение на заданный угол. Я нарыл в инете как получить значение конкретного пикселя. И все значения пикселей я записываю в... подробнее

Показать сообщение отдельно
laker
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 2

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

01.09.2013, 21:55. Просмотров 590. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru