3

こんにちは、libpng を使用して、c を使用してグレースケールの png 画像を raw 画像に変換しました。そのライブラリでは、関数png_init_ioはpngを読み取るためにファイルポインタを必要とします。しかし、png画像をバッファーとして渡します。png画像バッファーを生の画像に読み取るための他の代替関数はありますか。私を助けてください

int read_png(char *file_name,int *outWidth,int *outHeight,unsigned char **outRaw)  /* We need to open the file */
{
......
/* Set up the input control if you are using standard C streams */
   png_init_io(png_ptr, fp);
......
}

代わりに私はこれが必要です

int read_png(unsigned char *pngbuff, int pngbuffleng, int *outWidth,int *outHeight,unsigned char **outRaw)  /* We need to open the file */
{
}
4

1 に答える 1

2

のマニュアルからpng_init_io、 read 関数を でオーバーライドできることは明らかですpng_set_read_fn

これを行うpng_init_ioと、実際にはバッファから読み取っているのに、ファイルから読み取っていると誤解することができます。

struct fake_file
{
    unsigned int *buf;
    unsigned int size;
    unsigned int cur;
};

static ... fake_read(FILE *fp, ...) /* see input and output from doc */
{
    struct fake_file *f = (struct fake_file *)fp;
    ... /* read a chunk and update f->cur */
}

struct fake_file f = { .buf = pngBuff, .size = pngbuffleng, .cur = 0 };
/* override read function with fake_read */
png_init_io(png_ptr, (FILE *)&f);
于 2013-03-14T13:41:14.360 に答える