簡體   English   中英

Zlib 解壓縮方法不解析圖像中的字節數組

[英]Zlib uncompress method not parsing an array of bytes from an image

目前我正在嘗試從IDAT中的 PNG 圖像的 IDAT 塊中讀取字節。我能夠獲取所有其他信息,包括所述字節數組。

每當我嘗試使用 zlib 的uncompress()方法解壓縮所述數組時,就會出現問題。

[ ... ]

int decompress(Chunk * _chunk, Image * _image)
{
    uLongf compressedSize = _chunk->length;

    byte * uncompressedData = NULL;
    uLongf uncompressedSize = 0;

    int ret = uncompress(uncompressedData, &uncompressedSize, _chunk->data, compressedSize);

    if(ret != Z_OK)
    {
        fprintf(stderr, "Error: failed to uncompress IDAT chunk data. ERR CODE: %d\n", ret);
        return -1;
    }

    [ ... ]
}


chunk結構定義如下:

typedef struct chunk
{

    uint32_t length;
    byte chunkType[4];

    byte *data;

} Chunk;

byte類型只是一個unsigned charimage結構定義如下:

typedef struct image
{

    uint32_t width;
    uint32_t height;
  
    byte bitDepth;
    byte colorType;
    byte compression;
    byte filter;
    byte interlace;

} Image;

測試圖像的十六進制表示為:

89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
00 00 00 11 00 00 00 12 04 03 00 00 00 4F D7 28
67 00 00 00 30 50 4C 54 45 00 00 00 80 00 00 00
80 00 80 80 00 00 00 80 80 00 80 00 80 80 80 80
80 C0 C0 C0 FF 00 00 00 FF 00 FF FF 00 00 00 FF
FF 00 FF 00 FF FF FF FF FF 7B 1F B1 C4 00 00 00
09 70 48 59 73 00 00 0E C4 00 00 0E C4 01 95 2B
0E 1B 00 00 00 28 49 44 41 54 08 D7 63 D8 0D 05
1B 18 36 30 00 01 FF FF FF 24 B1 FE FF FF C0 C0
40 0E 6B FF FF FF 20 73 48 60 C1 5D 0A 00 BB 1A
49 27 39 98 BC 6E 00 00 00 00 49 45 4E 44 AE 42
60 82

IDAT塊的字節是:

08 D7 63 D8 0D 05 1B 18 36 30 00 01 FF FF FF 24 B1 FE FF FF C0 C0 40 0E 6B FF FF FF 20 73 48 60 C1 5D 0A 00 BB 1A 49 27

必須注意的是,我也沒有采用塊的 CRC; 根據我的理解,這應該不是問題。

知道為什么uncompress()方法返回Z_DATA_ERROR嗎?

您沒有在任何地方提供uncompress()來放置未壓縮的數據! uncompressedData不能是NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM