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吗?这是一些 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
于 2009-04-06T23:48:49.163 回答
0

这是用 Java 巧妙地读取整个 PNG 的代码。它很小,您应该能够挑选您需要的东西。

我认为翻译 it c# 会相当简单

于 2009-04-23T21:51:13.337 回答