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?
|