5

PNGファイルでこれらの奇妙なチャンク、つまり私の場合は「zTXt」チャンクを取得および設定する方法を探しています。このデータへのアクセスを提供する、.Net フレームワークまたはその他の既知のアセンブリに組み込まれているものはありますか? PNG リーダー/ライターが既に作成されている場合、この目的のために全体を作成する必要は避けたいと思います。

ありがとうございました!

進捗状況の更新: さらに検索した結果、私が達成したいことのために事前に作成されたものはないようです。今、自分でファイルを読み込もうとしていますが、データの圧縮部分に問題があります。ここで、この特定の問題について別の質問をしました:ファイルの一部で DeflateStream をどのように使用しますか?

これが機能するようになったら、ここにコードを回答として投稿します。(もちろん、他の誰かが私を打ち負かさない限り。)

4

3 に答える 3

4

以下は動作するはずです: http://sourceforge.net/projects/pngnet/ Subversion を使ってチェックアウトしてください。これは、png ファイルと小さな C# の例への低レベル アクセス用のライブラリです。

于 2009-09-10T15:15:27.320 に答える
1

.netである必要がありますか?チャンクを読み取り、再度書き戻すためのルビーコードを次に示します。処理を中央に挿入します

def extract_chunk(input, output)
   lenword = input.read(4) 
   length = lenword.unpack('N')[0]
   type = input.read(4)
   data = length>0 ? input.read(length) : ""
   crc = input.read(4)
   return nil if length<0 || !(('A'..'z')===type[0,1]) 

   #modify data here.

   output.write [data.length].pack('N')
   output.write type
   output.write data
   output.write crc(data)
   return type
end

def extract_png(input, output)
    hdr = input.read(8)
    raise "Not a PNG File" if hdr[0,4]!= "\211PNG"
    raise "file not in binary mode" if hdr[4,4]!="\r\n\032\n"
    output.write(hdr)
    loop do
      chunk_type = extract_chunk(input,output)
      p chunk_type
      break if  chunk_type.nil? || chunk_type == 'IEND' 
    end
end
于 2009-04-06T23:48:49.163 に答える
0

PNG全体を読み取るためのJavaでのコードは次のとおりです。それはかなり小さいので、必要なものを厳選できるはずです。

it c# の翻訳はかなり簡単だと思います

于 2009-04-23T21:51:13.337 に答える