Всем привет. Вычисляю ДКП (для jpeg) , после перевода изображение становится в клеточку размеров 8*8 , что не так в коде , не вижу ошибок???
double temp_Y = 0,pi = 3.14159265358979,Cv,Cu,N,M;
int lim,a,b;
for(int y1 = 0 ; y1 < myBitmap->Height; y1+=8) //ДКТ для Y
for( int x1 = 0; x1 < myBitmap->Width; x1 +=8)
{
if( lim = (myBitmap->Width - x1 ) < 8 ) a = x1 + lim;
else a = x1 + 8;
if( lim = (myBitmap->Width - y1 ) < 8 ) b = y1 + lim;
else b = y1 + 8;
N = a - x1;
M = b - y1;
for(int y2 = y1 ; y2 < b; y2++)
for( int x2 = x1; x2 < a; x2++)
{
if( x2 == 0)
Cu = sqrt( (double)1/ ( N));
if( x2 > 0 )
Cu = sqrt( (double)2/( N));
if( y2 == 0)
Cv = sqrt( (double)1/(M));
if( y2 > 0 )
Cv= sqrt( (double) 2/(M));
for(int j = 0 ; j < M; j++)
for( int i = 0; i < N; i++)
temp_Y += (double) Y[x1+i][y1+j] * cos( pi/N *( i + 0.5 )*(x2-x1) ) * cos( pi/M *(j + 0.5 )*(y2-y1) );
temp_Y *= (double) Cv * Cu ;
DCT1[x2][y2] = temp_Y ;
temp_Y = 0;
}
}
for(int y1 = 0 ; y1 < myBitmap->Height; y1+=8) //ОДКТ для Y
for( int x1 = 0; x1 < myBitmap->Width; x1 +=8)
{
if( lim = (myBitmap->Width - x1 ) < 8 ) a = x1 + lim;
else a = x1 + 8;
if( lim = (myBitmap->Width - y1 ) < 8 ) b = y1 + lim;
else b = y1 + 8;
N = a - x1;
M = b - y1;
for(int y2 = y1 ; y2 < b; y2++)
{
for( int x2 = x1; x2 < a; x2++)
{
for( int j = 0 ; j < M; j++)
for( int i = 0; i < N; i++)
{
if( i == 0)
Cu = sqrt( (double) 1/ (N));
if( i > 0 )
Cu = sqrt( (double)2/ (N));
if( j == 0)
Cv = sqrt( (double)1/(M));
if( j > 0 )
Cv= sqrt( (double) 2/(M));
temp_Y += (double) DCT1[x1+i][y1+j] *Cv * Cu * cos( pi/N *( i + 0.5 )*(x2-x1) ) * cos( pi/M *(j + 0.5 )*(y2-y1) );
}
Y[x2][y2] = temp_Y +128;
temp_Y = 0;
}
}
}
алгоритм не оптимизирован, сейчас главное понять где ошибка.