📄 zzq.c
字号:
#include "ejpgl.h"
unsigned char quantization_table[MATRIX_SIZE][MATRIX_SIZE] ={
{4, 3, 3, 4, 4, 5, 6, 6},
{3, 3, 4, 4, 5, 6, 6, 6},
{4, 4, 4, 4, 5, 6, 6, 6},
{4, 4, 4, 5, 6, 6, 6, 6},
{4, 4, 5, 6, 6, 7, 7, 6},
{4, 5, 6, 6, 6, 7, 7, 6},
{6, 6, 6, 6, 7, 7, 7, 7},
{6, 6, 6, 7, 7, 7, 7, 7}
};
signed char bitstream[NUMBER_OF_PIXELS] ;
int zzq_encode_init_start(int compression) {
return 0;
}
int zzq_encode_stop_done() {
}
void zzq_encode(signed short pixelmatrix[MATRIX_SIZE][MATRIX_SIZE], int color)
{
int i, x, y, jumped, deltax, deltay;
x = y = deltax = deltay = jumped = 0;
for(i=0;i<NUMBER_OF_PIXELS;i++)
{
if(pixelmatrix[y][x]>0)
bitstream[i] = (pixelmatrix[y][x]>>quantization_table[y][x]);
else
bitstream[i] = -((-pixelmatrix[y][x])>>quantization_table[y][x]);
if((y == 0) || (y == MATRIX_SIZE-1)) { //on top or bottom side of matrix
if(!jumped) { //first jump to element on the right
x++;
jumped = 1;
} else { //modify direction
if(i<(NUMBER_OF_PIXELS>>1)) {
deltax = -1;
deltay = 1;
} else {
deltax = 1;
deltay = -1;
}
x += deltax;
y += deltay;
jumped = 0;
}
} else if ((x == 0) || (x == MATRIX_SIZE-1)) { //on left or right side of matrix
if(!jumped) { //jump to element below
y++;
jumped = 1;
} else { //modify direction
if(i<(NUMBER_OF_PIXELS>>1)) {
deltax = 1;
deltay = -1;
} else {
deltax = -1;
deltay = 1;
}
x += deltax;
y += deltay;
jumped = 0;
}
}
else {//not on the edges of the matrix
x += deltax;
y += deltay;
}
}
EncodeDataUnit(bitstream, color);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -