我正在寻找一种方法来获取和设置PNG文件中的奇怪块,即在我的情况下,'zTXt'块。 .Net框架或任何其他已知程序集中是否有内置提供访问此数据的内容?如果已经完成,我想避免为此目的编写完整的PNG读/写器。
谢谢!
进度更新 经过更多的搜索,似乎没有为我想要完成的任何事情做好准备。我现在正试图自己阅读文件,但是我遇到了压缩部分数据的问题。我在这里提出了另一个问题:How do you use a DeflateStream on part of a file?
一旦我开始工作,我会在这里发布代码作为答案。 (除非别人当然打败我。)
答案 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#会相当简单