From: Cas E. <cas...@pl...> - 2007-04-12 18:21:53
|
this is my code: void pngWrite( char *file_name, int width, int height, unsigned char *buffer ) { FILE *fp; png_structp png_ptr; png_infop info_ptr; png_color_8 sig_bit; int i; int j; int k; int row; png_bytep *row_pointers; fopen_s( &fp, file_name, "wb"); png_ptr = png_create_write_struct( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL ); if( png_ptr == NULL ) { fclose( fp ); return; } info_ptr = png_create_info_struct( png_ptr ); if( info_ptr == NULL ) { fclose( fp ); png_destroy_write_struct( &png_ptr, NULL ); return; } if( setjmp( png_ptr->jmpbuf ) ) { png_destroy_write_struct( &png_ptr, &info_ptr ); fclose( fp ); return; } png_init_io( png_ptr, fp ); png_set_IHDR( png_ptr, info_ptr, width, height, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE ); sig_bit.red = 8; sig_bit.green = 8; sig_bit.blue = 8; sig_bit.alpha = 8; png_set_sBIT( png_ptr, info_ptr, &sig_bit ); png_write_info( png_ptr, info_ptr ); png_set_packing( png_ptr ); row_pointers = ( png_bytep* )malloc( sizeof( png_bytep ) * height ); for( row = 0; row < height; row++ ) { row_pointers[row] = ( png_bytep )malloc( width * 4 ); } if( row_pointers == NULL ) { return; } k = 0; i = 0; while( i < height ) { j = 0; while( j < width * 4 ) { row_pointers[i][j+0] = buffer[k]; k++; row_pointers[i][j+1] = buffer[k]; k++; row_pointers[i][j+2] = buffer[k]; k++; row_pointers[i][j+3] = buffer[k]; k++; j += 4; } i++; } png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); fclose(fp); return; } my program crashes at png_write_info. what could be wrong? |