Использование чанков в PNG
Я ищу способ получить и установить эти странные куски в файле PNG, а именно, в моем случае, кусок 'zTXt'. Есть ли что-то встроенное в.Net Framework или любую другую известную сборку, которая обеспечивает доступ к этим данным? Я хотел бы избежать необходимости писать для этой цели целый читатель / писатель PNG, если это уже было сделано.
Спасибо!
Обновление прогресса: после дополнительных поисков, кажется, ничего не сделано для того, чего я хочу достичь. Я сейчас пытаюсь сам прочитать файл, но у меня проблемы со сжатой частью данных. Я задал еще один вопрос для этой конкретной проблемы: как использовать DeflateStream для части файла?
Как только я получу это, я выложу код здесь как ответ сам. (Если, конечно, кто-то другой не победит меня)
3 ответа
Следующее должно работать: http://sourceforge.net/projects/pngnet/ Проверьте это с помощью Subversion. Это библиотека для низкоуровневого доступа к png-файлам и небольшой пример на C#.
Это должен быть.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
Вот код, аккуратно написанный на Java, для чтения всего PNG. Он довольно маленький, и вы сможете выбрать то, что вам нужно.
Я думаю, что перевод его с # будет достаточно простым