2

我有一个很大的二进制文件,里面存储了很多文件。我正在尝试从文件中复制 PCX 图像的数据并将其写入一个新文件,然后我可以在图像编辑器中打开该文件。

在获得 PCX 文件头的规范后,我认为我已经在大二进制文件中找到了图像。我的问题是我无法弄清楚我应该在标题之后读取多少字节。我阅读了有关解码 PCX 文件的信息,但我不想解码任何内容。我想读取编码的图像数据并将其写入单独的文件,以便可以打开图像编辑器。

这是标题。我已经包含了图像的值,因为我猜它们可以用来确定图像数据的“文件结尾”。

struct PcxHeader
{
BYTE Identifier;        // PCX Id Number (Always 0x0A) // 10  
BYTE Version;           // Version Number    // 5  
BYTE Encoding;          // Encoding Format    // 1  
BYTE BitsPerPixel;      // Bits per Pixel    // 8  
WORD XStart;            // Left of image     // 0  
WORD YStart;            // Top of Image     // 0  
WORD XEnd;              // Right of Image    // 319  
WORD YEnd;              // Bottom of image    // 199  
WORD HorzRes;           // Horizontal Resolution   // 320  
WORD VertRes;           // Vertical Resolution   // 200  
BYTE Palette[48];       // 16-Color EGA Palette    
BYTE Reserved1;         // Reserved (Always 0)  
BYTE NumBitPlanes;      // Number of Bit Planes   // 1  
WORD BytesPerLine;      // Bytes per Scan-line   // 320  
WORD PaletteType;       // Palette Type     // 0  
WORD HorzScreenSize;    // Horizontal Screen Size   // 0  
WORD VertScreenSize;    // Vertical Screen Size   // 0  
BYTE Reserved2[54];     // Reserved (Always 0)
};
4

2 回答 2

4

PCX 文件格式包含三个组成部分:

  • 128 字节标头(虽然实际使用较少,但长度为 128 字节)
  • 可变长度图像数据
  • 可选的 256 色调色板(尽管存在不正确的 PCX 文件,其调色板尺寸不是 256 色)。

来自维基百科文章

由于 PCX 压缩方案,找到图像数据实际长度的唯一方法是读取和处理它。这项工作很困难,因为该格式允许压缩数据超出图像尺寸,通常将其填充到下一个 8 或 16 行边界。

一般来说,听起来您必须对图像数据进行“深度处理”才能找到嵌入在较大二进制文件中的完整 PCX 文件。

于 2009-11-06T19:27:47.587 回答
0

在不了解 PCX 文件格式的情况下,我可以对此做出最好的猜测:

 bytesAfterHeader = header.BytesPerLine * header.VertRes;
于 2009-11-06T19:20:59.577 回答