我正在處理 CIP3 文件,這些文件基本上是帶有一些附加項目的 PostScript 文件。這里重要的是:圖像矩陣圖像寬度/高度圖像數據圖像數據是 RLE 編碼數據 - 我已經從幾個月前提出的問題中獲得了解碼 RLE 的代碼。該代碼有效,我在我擁有的一些示例文件上進行了測試。然而,看看這個表:我只在情況 1 和 2 上工作。但是,當涉及到“從右到左”或“從下到上”閱讀時,我無法讓它工作。我嘗試過:LINQ 的 Reverse() 函數 - 仍然產生無效圖像使用常規 for 循環反轉字節數組 - 無效圖像還在解碼后反轉文件 - 無效圖像在解碼前反轉字節數組 - 無效圖像這是解碼 RLE 圖像的代碼:class RLEDecompressor{? ? public byte[] rleDecompressed { get; private set; }? ? public RLEDecompressor(byte[] byteFile)? ? {? ? ? ? List<byte> final = new List<byte>();? ? ? ? int i = 0;? ? ? ? while (i < byteFile.Length)? ? ? ? {? ? ? ? ? ? try? ? ? ? ? ? {? ? ? ? ? ? ? ? var lengthByte = byteFile[i++]; //First run, position 1? ? ? ? ? ? ? ? if (lengthByte <= 127)? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? int currLen = lengthByte + 1;? ? ? ? ? ? ? ? ? ? for (int j = 0; j < currLen; j++)? ? ? ? ? ? ? ? ? ? ? ? final.Add(byteFile[i++]);? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? else? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? int currLen = 257 - lengthByte;? ? ? ? ? ? ? ? ? ? byte byteToCopy = byteFile[i++];? ? ? ? ? ? ? ? ? ? for (int j = 0; j < currLen; j++)? ? ? ? ? ? ? ? ? ? ? ? final.Add(byteToCopy);? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? ? ? catch (Exception ex)? ? ? ? ? ? {? ? ? ? ? ? ? ? rleDecompressed = final.ToArray();? ? ? ? ? ? ? ? break;? ? ? ? ? ? }? ? ? ? }? ? ? ? rleDecompressed = final.ToArray();? ? ? ??? ? }我期望輸出是有效的圖像。然而,我得到的所有輸出都是模糊的圖像或“其他東西”(不是有效的圖像)。圖像寬度:2061圖片高度:1571頻道:1如果一切都正確解碼,則可以在 Photoshop 中查看圖像(只需使用擴展名 .raw 保存)。預先感謝您的任何意見。
1 回答

SMILET
TA貢獻1796條經驗 獲得超4個贊
您的“圖像寬度”和“圖像高度”值似乎互換了。可以使用以下設置將解碼后的數據作為“原始圖像數據”讀入 Gimp:
圖像類型:索引
偏移量:0
寬度:1571
身高:2016年
調色板類型:R、G、B(普通)
調色板偏移:0
調色板文件:無
- 1 回答
- 0 關注
- 106 瀏覽
添加回答
舉報
0/150
提交
取消