1

私はカメラから画像をキャプチャしています.16ビット(!)画像をPNGで保存する機能とTIFF形式で保存する機能が2つあります。PNG が非常にノイズの多い画像である理由を説明していただけますか? このような:

PNG 関数:

 bool save_image_png(const char *file_name,const mono16bit& img)
{
    [...]
        /* write header */
        if (setjmp(png_jmpbuf(png_ptr)))
                abort_("[write_png_file] Error during writing header");

        png_set_IHDR(png_ptr, info_ptr, width, height,
                     bit_depth,PNG_COLOR_TYPE_GRAY , PNG_INTERLACE_NONE,
                     PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);

        png_write_info(png_ptr, info_ptr);



        /* write bytes */
        if (setjmp(png_jmpbuf(png_ptr)))
                abort_("[write_png_file] Error during writing bytes");

    row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height);

        for (y=0; y<height; y++)
            row_pointers[y] = (png_byte*) malloc(png_get_rowbytes(png_ptr,info_ptr));
     for (y = 0; y < height; y++)
     {
             row_pointers[y] = (png_bytep)img.getBuffer() + y * width*2;
     }



        png_write_image(png_ptr, row_pointers);


        /* end write */

  [...]           

}

および TIFF 関数:

 bool save_image(const char *fname,const mono16bit& img)
{
  [...]

  for(y=0; y<height; y++) {
    if((err=TIFFWriteScanline(tif,(tdata_t)(img.getBuffer()+width*y),y,0))==-1)
      break;
  }

  TIFFClose(tif);

  if(err==-1) {
    fprintf(stderr,"Error writing to %s file\n",fname);
    return false;
  }
  return true;

//#endif //USE_LIBTIFF
}

ありがとうございました!

4

2 に答える 2

0

バイトオーダーに問題がある可能性があります。追加してみてください:

png_set_swap(png_ptr);

画像を保存する前に

于 2012-05-23T20:53:52.700 に答える