Mercurial > mplayer.hg
diff Gui/bitmap/bmp/bmp.c @ 1693:d237c5d4b216
GUI version n-1
author | arpi |
---|---|
date | Sat, 25 Aug 2001 21:04:29 +0000 |
parents | |
children | f91ad6d23ce9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Gui/bitmap/bmp/bmp.c Sat Aug 25 21:04:29 2001 +0000 @@ -0,0 +1,113 @@ + +#ifndef __MY_BMP +#define __MY_BMP + +/* + 0.1 : BMP type. + 2.5 : File size. + 6.7 : Res. + 8.9 : Res. + 10.13 : Offset of bitmap. + 14.17 : Header size. + 18.21 : X size. + 22.25 : Y size. + 26.27 : Number of planes. + 28.29 : Number of bits per pixel. + 30.33 : Compression flag. + 34.37 : Image data size in bytes. + 38.41 : Res + 42.45 : Res + 46.49 : Res + 50.53 : Res +*/ + +#include <stdlib.h> +#include <stdio.h> + +#include "bmp.h" +#include "../bitmap.h" +#include "../../error.h" + +int bmpRead( unsigned char * fname,txSample * bF ) +{ + unsigned char bmpHeader[54]; + FILE * BMP; + unsigned long i; + unsigned char * line; + int linesize; + + + if ( (BMP=fopen( fname,"rt" )) == NULL ) + { +#ifdef DEBUG + dbprintf( 4,"[bmp] File not found ( %s ).\n",fname ); +#endif + return 1; + } + if ( (i=fread( bmpHeader,54,1,BMP )) != 1 ) + { +#ifdef DEBUG + dbprintf( 4,"[bmp] Header read error ( %s ).\n",fname ); +#endif + return 2; + } +// memcpy( &bF->Size,&bmpHeader[2],4 ); + memcpy( &bF->Width,&bmpHeader[18],4 ); + memcpy( &bF->Height,&bmpHeader[22],4 ); + memcpy( &bF->BPP,&bmpHeader[28],2 ); +// memcpy( &bF->ImageSize,&bmpHeader[34],4 ); + bF->ImageSize=( bF->Width * bF->Height ) * ( bF->BPP / 8 ); + + if ( bF->BPP < 24 ) + { + #ifdef DEBUG + dbprintf( 4,"[bmp] Sorry, this loader not supported 16 bit or less ...\n" ); + #endif + return 3; + } + +#ifdef DEBUG + dbprintf( 4,"[bmp] filename: %s\n",fname ); + dbprintf( 4,"[bmp] size: %dx%d bits: %d\n",bF->Width,bF->Height,bF->BPP ); + dbprintf( 4,"[bmp] imagesize: %lu\n",bF->ImageSize ); +#endif + + if ( ( bF->Image=malloc( bF->ImageSize ) ) == NULL ) + { + #ifdef DEBUG + dbprintf( 4,"[bmp] Not enough memory for image buffer.\n" ); + #endif + return 4; + } + + if ( (i=fread( bF->Image,bF->ImageSize,1,BMP )) != 1 ) + { + #ifdef DEBUG + dbprintf( 4,"[bmp] Image read error.\n" ); + #endif + return 5; + } + + fclose( BMP ); + + linesize=bF->Width * ( bF->BPP / 8 ); + if ( (line=malloc( linesize )) == NULL ) + { + #ifdef DEBUG + dbprintf( 4,"[bmp] Not enough memory for flipping.\n" ); + #endif + return 6; + } + + for ( i=0;i < bF->Height / 2;i++ ) + { + memcpy( line,&bF->Image[ i * linesize ],linesize ); + memcpy( &bF->Image[ i * linesize ],&bF->Image[ ( bF->Height - i - 1 ) * linesize ],linesize ); + memcpy( &bF->Image[ ( bF->Height - i - 1 ) * linesize ],line,linesize ); + } + free( line ); + + return 0; +} + +#endif \ No newline at end of file