📄 shapeenhcommon.cpp
字号:
Int blkx,
Int blky,
Int mblksize,
Int max_blkx)
{
Int i, j, i2, j2, x, y, x2, y2, k, l;
Int mborder = MBORDER,
mblksize_ext = mblksize+(mborder<<1);/* bordered bab size in the current layer: 20 */
Int border = BORDER,
blksize = mblksize>>1, /* bab size in the lower layer : 8 */
blksize_ext = blksize+(border<<1); /* bordered bab size in the lower layer: 8 */
Int width2 = object_width,
height2 = object_height,
width = width2 >> 1,
height = height2 >> 1;
/*-- Initialize bordered babs -----------------------------------*/
for ( i=k=0; i<blksize_ext; i++)
for( j=0; j<blksize_ext; j++, k++)
bordered_lower_bab[k] = 0;
for ( i=k=0; i<mblksize_ext; i++)
for( j=0; j<blksize_ext; j++, k++)
bordered_half_bab[k] = 0;
for ( i=k=0; i<mblksize_ext; i++)
for( j=0; j<mblksize_ext; j++, k++)
bordered_curr_bab[k] = 0;
/*-- Copy original babs ----------------------------------------*/
for ( j=k=0, l=border*blksize_ext; j<blksize; j++, l+=blksize_ext )
for ( i=0; i<blksize; i++, k++ )
bordered_lower_bab[l+i+border] = lower_bab[k];
for ( j=k=0, l=mborder*blksize_ext; j<mblksize; j++, l+=blksize_ext )
for ( i=0; i<blksize; i++, k++ )
bordered_half_bab[l+i+border] = half_bab[k];
for ( j=k=0, l=mborder*mblksize_ext; j<mblksize; j++, l+=mblksize_ext )
for ( i=0; i<mblksize; i++, k++ )
bordered_curr_bab[l+i+mborder] = curr_bab[k];
/*----- Top border -----------------------------------------------*/
/*-- Top border for lower layer --*/
x = blkx * blksize - border;
y = blky * blksize - border;
for( j=l=0, k=y*width; j<border; j++, k+=width, l+=blksize_ext )
{
for( i=0; i<blksize_ext; i++ )
{
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) )
bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0);
}
}
/*-- Top border for half layer --*/
x = blkx * blksize - border;
y = blky * mblksize - mborder;
for( j=l=0, k=y*width; j<mborder; j++, k+=width, l+=blksize_ext )
{
for( i=0; i<blksize_ext; i++ )
{
if( (0 <= y+j && y+j < height2) && (0 <= x+i && x+i < width) )
bordered_half_bab[l+i] = ( HalfShape[k+x+i] != 0);
}
}
/*-- Top border for current layer --*/
x2 = blkx * mblksize - mborder;
y2 = blky * mblksize - mborder;
for( j2=l=0, k=y2*width2; j2<mborder; j2++, k+=width2, l+=mblksize_ext )
{
for( i2=0; i2<mblksize_ext; i2++ )
{
if( (0 <= y2+j2 && y2+j2 < height2) && (0 <= x2+i2 && x2+i2 < width2) )
bordered_curr_bab[l+i2] = ( CurShape[k+x2+i2] != 0);
}
}
/*----- Left border ----------------------------------------------*/
/*-- Left border for the lower layer --*/
x = blkx * blksize - border;
y = blky * blksize;
for( j=0, l=border*blksize_ext, k=y*width; j<blksize; j++, k+=width, l+=blksize_ext)
{
for( i=0; i<border; i++ )
{
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) )
bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0);
}
}
/*-- Left border for the half higher layer --*/
x = blkx * blksize - border;
y = blky * mblksize;
for( j=0, l=mborder*blksize_ext, k=y*width; j<mblksize; j++, k+=width, l+=blksize_ext)
{
for( i=0; i<border; i++ )
{
if( (0 <= y+j && y+j < height2) && (0 <= x+i && x+i < width) )
bordered_half_bab[l+i] = ( HalfShape[k+x+i] != 0);
}
}
/*-- Left border for the current layer --*/
x2 = blkx * mblksize - mborder;
y2 = blky * mblksize;
for( j2=0, l=mborder*mblksize_ext, k=y2*width2; j2<mblksize;
j2++, k+=width2, l+=mblksize_ext)
{
for( i2=0; i2<mborder; i2++ )
{
if( (0 <= y2+j2 && y2+j2 < height2) && (0 <= x2+i2 && x2+i2 < width2) )
bordered_curr_bab[l+i2] = ( CurShape[k+x2+i2] != 0);
}
}
/*----- Right border ---------------------------------------------*/
x = (blkx + 1) * blksize;
y = blky * blksize;
x2 = (blkx + 1) * mblksize;
y2 = blky * mblksize;
/*-- Right border for the lower layer --*/
for ( j=0, l=border*blksize_ext, k=y*width; j<blksize; j++, k+=width, l+=blksize_ext)
{
for ( i=0; i<border; i++ )
{
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) )
bordered_lower_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0);
}
}
/*----- Right border ---------------------------------------------*/
x = (blkx + 1) * blksize;
y = blky * blksize;
x2 = (blkx + 1) * mblksize;
y2 = blky * mblksize;
/*-- Right border for the half layer --*/
for ( j2=0, l=mborder*blksize_ext; j2<mblksize; j2++, l+=blksize_ext)
{
j = j2>>1;
k = (y+j)*width;
for ( i=0; i<border; i++ )
{
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) ) {
bordered_half_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0);
if(/* LowShape[k+x+i-1] == 0 && */ y+j+1 < height && j2%2==1) { /* avoid the odd subsampling mishap */
bordered_half_bab[l+i+blksize+border] = ( LowShape[k+x+i] != 0) | ( LowShape[k+width+x+i] != 0);
}
}
}
}
/*-- Right border for the currnet layer --*/
for ( j2=0, l=mborder*mblksize_ext; j2<mblksize; j2++, l+=mblksize_ext)
{
j = j2>>1;
k = (y+j)*width;
for ( i2=0; i2<mborder; i2++ )
{
i = i2 >> 1;
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) )
bordered_curr_bab[l+i2+mblksize+mborder] = ( LowShape[k+x+i] != 0);
}
}
/*----- Bottom border --------------------------------------------*/
x = blkx * blksize - border;
y = (blky + 1) * blksize;
x2 = blkx * mblksize - mborder;
y2 = (blky + 1) * mblksize;
/*-- Bottom border for the lower layer --*/
for ( j=0, l=(blksize+border)*blksize_ext, k=y*width; j<border;
j++, k+=width, l+=blksize_ext)
{
for ( i=0; i<blksize_ext; i++ )
{
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) )
bordered_lower_bab[l+i] = ( LowShape[k+x+i] != 0);
}
}
/*-- Bottom border for the half layer --*/
for ( j2=0, l=(mblksize+mborder)*blksize_ext; j2<mborder; j2++, l+=blksize_ext)
{
j = j2>>1;
k = (y+j)*width;
for ( i=0; i<blksize_ext; i++ )
{
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) )
bordered_half_bab[l+i] = ( LowShape[k+x+i] != 0);
}
}
/*-- Bottom border for the current layer --*/
for ( j2=0, l=(mblksize+mborder)*mblksize_ext; j2<mborder; j2++, l+=mblksize_ext)
{
j = j2>>1;
k = (y+j)*width;
for ( i2=0; i2<mblksize_ext; i2++ )
{
i = i2>>1;
if( (0 <= y+j && y+j < height) && (0 <= x+i && x+i < width) )
bordered_curr_bab[l+i2] = ( LowShape[k+x+i] != 0);
}
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -