亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 PostScript (CIP3) 文件中提取位圖

從 PostScript (CIP3) 文件中提取位圖

C#
莫回無 2023-08-13 14:02:53
我正在處理 CIP3 文件,這些文件基本上是帶有一些附加項目的 PostScript 文件。這里重要的是:圖像矩陣圖像寬度/高度圖像數據圖像數據是 RLE 編碼數據 - 我已經從幾個月前提出的問題中獲得了解碼 RLE 的代碼。該代碼有效,我在我擁有的一些示例文件上進行了測試。然而,看看這個表:我只在情況 1 和 2 上工作。但是,當涉及到&ldquo;從右到左&rdquo;或&ldquo;從下到上&rdquo;閱讀時,我無法讓它工作。我嘗試過: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();? ? ? ??? ? }我期望輸出是有效的圖像。然而,我得到的所有輸出都是模糊的圖像或&ldquo;其他東西&rdquo;(不是有效的圖像)。圖像寬度:2061圖片高度:1571頻道:1如果一切都正確解碼,則可以在 Photoshop 中查看圖像(只需使用擴展名 .raw 保存)。預先感謝您的任何意見。
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

您的“圖像寬度”和“圖像高度”值似乎互換了。可以使用以下設置將解碼后的數據作為“原始圖像數據”讀入 Gimp:

  • 圖像類型:索引

  • 偏移量:0

  • 寬度:1571

  • 身高:2016年

  • 調色板類型:R、G、B(普通)

  • 調色板偏移:0

  • 調色板文件:無


查看完整回答
反對 回復 2023-08-13
  • 1 回答
  • 0 關注
  • 106 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號