mirror of https://github.com/mpv-player/mpv
fix small xshape bug
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2718 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
a5c80b82c5
commit
f691833dd3
49
Gui/bitmap.c
49
Gui/bitmap.c
|
@ -173,3 +173,52 @@ int bpRead( char * fname, txSample * bf )
|
|||
Normalize( bf );
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Convert32to1( txSample * in,txSample * out,int adaptivlimit )
|
||||
{
|
||||
out->Width=in->Width;
|
||||
out->Height=in->Height;
|
||||
out->BPP=1;
|
||||
out->ImageSize=out->Width * out->Height / 8;
|
||||
dbprintf( 4,"[c1to32] imagesize: %d\n",out->ImageSize );
|
||||
out->Image=(char *)calloc( 1,out->ImageSize );
|
||||
if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
|
||||
{
|
||||
int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0; int nothaveshape = 1;
|
||||
buf=(unsigned long *)in->Image;
|
||||
for ( b=0,i=0;i < out->Width * out->Height;i++ )
|
||||
{
|
||||
if ( buf[i] != adaptivlimit ) tmp=( tmp >> 1 )|128;
|
||||
else { tmp=tmp >> 1; buf[i]=nothaveshape=0; }
|
||||
if ( b++ == 7 ) { out->Image[c++]=tmp; tmp=b=0; }
|
||||
}
|
||||
if ( b ) out->Image[c]=tmp;
|
||||
if ( nothaveshape ) { free( out->Image ); out->Image=NULL; }
|
||||
}
|
||||
}
|
||||
|
||||
void Convert1to32( txSample * in,txSample * out )
|
||||
{
|
||||
if ( in->Image == NULL ) return;
|
||||
out->Width=in->Width;
|
||||
out->Height=in->Height;
|
||||
out->BPP=32;
|
||||
out->ImageSize=out->Width * out->Height * 4;
|
||||
out->Image=(char *)calloc( 1,out->ImageSize );
|
||||
dbprintf( 4,"[c32to1] imagesize: %d\n",out->ImageSize );
|
||||
if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
|
||||
{
|
||||
int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0;
|
||||
buf=(unsigned long *)out->Image;
|
||||
for ( c=0,i=0;i < in->Width * in->Height / 8;i++ )
|
||||
{
|
||||
tmp=in->Image[i];
|
||||
for ( b=0;b<8;b++ )
|
||||
{
|
||||
buf[c]=0;
|
||||
if ( tmp&0x1 ) buf[c]=0xffffffff;
|
||||
c++; tmp=tmp>>1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,5 +17,7 @@ typedef struct _txSample
|
|||
|
||||
extern int bpRead( char * fname, txSample * bf );
|
||||
extern int conv24to32( txSample * bf );
|
||||
extern void Convert32to1( txSample * in,txSample * out,int adaptivlimit );
|
||||
extern void Convert1to32( txSample * in,txSample * out );
|
||||
|
||||
#endif
|
||||
|
|
|
@ -173,3 +173,52 @@ int bpRead( char * fname, txSample * bf )
|
|||
Normalize( bf );
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Convert32to1( txSample * in,txSample * out,int adaptivlimit )
|
||||
{
|
||||
out->Width=in->Width;
|
||||
out->Height=in->Height;
|
||||
out->BPP=1;
|
||||
out->ImageSize=out->Width * out->Height / 8;
|
||||
dbprintf( 4,"[c1to32] imagesize: %d\n",out->ImageSize );
|
||||
out->Image=(char *)calloc( 1,out->ImageSize );
|
||||
if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
|
||||
{
|
||||
int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0; int nothaveshape = 1;
|
||||
buf=(unsigned long *)in->Image;
|
||||
for ( b=0,i=0;i < out->Width * out->Height;i++ )
|
||||
{
|
||||
if ( buf[i] != adaptivlimit ) tmp=( tmp >> 1 )|128;
|
||||
else { tmp=tmp >> 1; buf[i]=nothaveshape=0; }
|
||||
if ( b++ == 7 ) { out->Image[c++]=tmp; tmp=b=0; }
|
||||
}
|
||||
if ( b ) out->Image[c]=tmp;
|
||||
if ( nothaveshape ) { free( out->Image ); out->Image=NULL; }
|
||||
}
|
||||
}
|
||||
|
||||
void Convert1to32( txSample * in,txSample * out )
|
||||
{
|
||||
if ( in->Image == NULL ) return;
|
||||
out->Width=in->Width;
|
||||
out->Height=in->Height;
|
||||
out->BPP=32;
|
||||
out->ImageSize=out->Width * out->Height * 4;
|
||||
out->Image=(char *)calloc( 1,out->ImageSize );
|
||||
dbprintf( 4,"[c32to1] imagesize: %d\n",out->ImageSize );
|
||||
if ( out->Image == NULL ) dbprintf( 4,"nem van ram baze\n" );
|
||||
{
|
||||
int i,b,c=0; unsigned long * buf = NULL; unsigned char tmp = 0;
|
||||
buf=(unsigned long *)out->Image;
|
||||
for ( c=0,i=0;i < in->Width * in->Height / 8;i++ )
|
||||
{
|
||||
tmp=in->Image[i];
|
||||
for ( b=0;b<8;b++ )
|
||||
{
|
||||
buf[c]=0;
|
||||
if ( tmp&0x1 ) buf[c]=0xffffffff;
|
||||
c++; tmp=tmp>>1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,5 +17,7 @@ typedef struct _txSample
|
|||
|
||||
extern int bpRead( char * fname, txSample * bf );
|
||||
extern int conv24to32( txSample * bf );
|
||||
extern void Convert32to1( txSample * in,txSample * out,int adaptivlimit );
|
||||
extern void Convert1to32( txSample * in,txSample * out );
|
||||
|
||||
#endif
|
||||
|
|
|
@ -132,6 +132,7 @@ int __base( char * in )
|
|||
defList->main.width=defList->main.Bitmap.Width;
|
||||
defList->main.height=defList->main.Bitmap.Height;
|
||||
#ifdef HAVE_XSHAPE
|
||||
/*
|
||||
defList->main.Mask.Width=defList->main.Bitmap.Width;
|
||||
defList->main.Mask.Height=defList->main.Bitmap.Height;
|
||||
defList->main.Mask.BPP=1;
|
||||
|
@ -148,7 +149,17 @@ int __base( char * in )
|
|||
if ( b++ == 7 ) { defList->main.Mask.Image[c++]=tmp; tmp=b=0; }
|
||||
}
|
||||
if ( b ) defList->main.Mask.Image[c]=tmp;
|
||||
if ( nothaveshape ) { free( defList->main.Mask.Image ); defList->main.Mask.Image=NULL; }
|
||||
// if ( nothaveshape ) { free( defList->main.Mask.Image ); defList->main.Mask.Image=NULL; }
|
||||
}
|
||||
*/
|
||||
Convert32to1( &defList->main.Bitmap,&defList->main.Mask,0x00ff00ff );
|
||||
{
|
||||
if ( defList->main.Mask.Image != NULL )
|
||||
{
|
||||
txSample d;
|
||||
Convert1to32( &defList->main.Mask,&d );
|
||||
tgaWriteTexture( "debug.tga",&d );
|
||||
}
|
||||
}
|
||||
#ifdef DEBUG
|
||||
dbprintf( 3,"[skin] mask: %dx%d\n",defList->main.Mask.Width,defList->main.Mask.Height );
|
||||
|
|
Loading…
Reference in New Issue