Mercurial > mplayer.hg
changeset 2717:5fa8c079ee3c
fix small xshape bug
author | pontscho |
---|---|
date | Mon, 05 Nov 2001 17:00:42 +0000 |
parents | 5e10c7239819 |
children | 9c5e64493742 |
files | Gui/bitmap.c Gui/bitmap.h Gui/bitmap/bitmap.c Gui/bitmap/bitmap.h Gui/skin/skin.c |
diffstat | 5 files changed, 114 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/Gui/bitmap.c Mon Nov 05 15:47:21 2001 +0000 +++ b/Gui/bitmap.c Mon Nov 05 17:00:42 2001 +0000 @@ -173,3 +173,52 @@ 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; + } + } + } +}
--- a/Gui/bitmap.h Mon Nov 05 15:47:21 2001 +0000 +++ b/Gui/bitmap.h Mon Nov 05 17:00:42 2001 +0000 @@ -17,5 +17,7 @@ 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
--- a/Gui/bitmap/bitmap.c Mon Nov 05 15:47:21 2001 +0000 +++ b/Gui/bitmap/bitmap.c Mon Nov 05 17:00:42 2001 +0000 @@ -173,3 +173,52 @@ 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; + } + } + } +}
--- a/Gui/bitmap/bitmap.h Mon Nov 05 15:47:21 2001 +0000 +++ b/Gui/bitmap/bitmap.h Mon Nov 05 17:00:42 2001 +0000 @@ -17,5 +17,7 @@ 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
--- a/Gui/skin/skin.c Mon Nov 05 15:47:21 2001 +0000 +++ b/Gui/skin/skin.c Mon Nov 05 17:00:42 2001 +0000 @@ -132,6 +132,7 @@ 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 @@ 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 );