在PNG中使用Chunks

时间:2009-04-06 21:51:08

标签: .net png

我正在寻找一种方法来获取和设置PNG文件中的奇怪块,即在我的情况下,'zTXt'块。 .Net框架或任何其他已知程序集中是否有内置提供访问此数据的内容?如果已经完成,我想避免为此目的编写完整的PNG读/写器。

谢谢!

进度更新 经过更多的搜索,似乎没有为我想要完成的任何事情做好准备。我现在正试图自己阅读文件,但是我遇到了压缩部分数据的问题。我在这里提出了另一个问题:How do you use a DeflateStream on part of a file?

一旦我开始工作,我会在这里发布代码作为答案。 (除非别人当然打败我。)

3 个答案:

答案 0 :(得分:4)

以下应该有效: http://sourceforge.net/projects/pngnet/ 使用Subversion检查出来。 它是一个用于低级访问png文件的库和一个小型C#示例。

答案 1 :(得分:0)

它必须是.net吗?这里有一些ruby代码来读取块并再次将它们写回来。在中间插入处理

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

答案 2 :(得分:0)

以下是读取整个PNG的代码neatly in Java。它非常小,你应该能够挑选你需要的东西。

我认为将它翻译成c#会相当简单