我正在處理 CIP3 文件,這些文件基本上是帶有一些附加項(xiàng)目的 PostScript 文件。這里重要的是:圖像矩陣圖像寬度/高度圖像數(shù)據(jù)圖像數(shù)據(jù)是 RLE 編碼數(shù)據(jù) - 我已經(jīng)從幾個(gè)月前提出的問題中獲得了解碼 RLE 的代碼。該代碼有效,我在我擁有的一些示例文件上進(jìn)行了測(cè)試。然而,看看這個(gè)表:我只在情況 1 和 2 上工作。但是,當(dāng)涉及到“從右到左”或“從下到上”閱讀時(shí),我無法讓它工作。我嘗試過:LINQ 的 Reverse() 函數(shù) - 仍然產(chǎn)生無效圖像使用常規(guī) for 循環(huán)反轉(zhuǎn)字節(jié)數(shù)組 - 無效圖像還在解碼后反轉(zhuǎn)文件 - 無效圖像在解碼前反轉(zhuǎn)字節(jié)數(shù)組 - 無效圖像這是解碼 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 中查看圖像(只需使用擴(kuò)展名 .raw 保存)。預(yù)先感謝您的任何意見。
1 回答

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