Использование чанков в PNG - PullRequest
4 голосов
/ 07 апреля 2009

Я ищу способ получить и установить эти странные куски в файле PNG, а именно, в моем случае, блок 'zTXt'. Есть ли что-то встроенное в .Net Framework или любую другую известную сборку, которая обеспечивает доступ к этим данным? Я бы не хотел писать для этой цели целый читатель / писатель PNG, если это уже сделано.

Спасибо!

Обновление прогресса: После дополнительных поисков, кажется, ничего не сделано для того, чего я хочу достичь. Я сейчас пытаюсь сам прочитать файл, но у меня проблемы со сжатой частью данных. Я задал еще один вопрос для этой конкретной проблемы: Как вы используете DeflateStream для части файла?

Как только я это заработаю, я сам выложу код здесь в качестве ответа. (Если, конечно, кто-то другой не победит меня).

Ответы [ 3 ]

4 голосов
/ 10 сентября 2009

Должно работать следующее: http://sourceforge.net/projects/pngnet/ Проверьте это с помощью Subversion. Это библиотека для низкоуровневого доступа к png-файлам и небольшой пример на C #.

0 голосов
/ 24 апреля 2009

Вот код аккуратно в Java для чтения всего PNG. Она довольно маленькая, и вы сможете выбрать то, что вам нужно.

Я бы подумал, что перевод it c # будет достаточно простым

0 голосов
/ 07 апреля 2009

Должно ли это быть .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...