1 | ||||||
Сохранить PNG как grayscale 16bit04.02.2013, 16:24. Показов 3381. Ответов 17
Метки нет (Все метки)
Привет!
Собственно сабж. Из доки вычитал что для чтения 16bit нужно использовать ExtraScanline. Причём в Scanline хранится только первые 8bit данных, а старшие в ExtraScanline. Проверил. Чтение вроде работает. А запись - нет!
Добавлено через 2 минуты http://docwiki.embarcadero.com... raScanline
0
|
04.02.2013, 16:24 | |
Ответы с готовыми решениями:
17
Как содержимое TPaintBox сохранить в .png файл Как сохранить содержимое CANVAS в .PNG Создать png и сохранить как картинку Сохранить как .png в том числе "свободный фон" |
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
04.02.2013, 18:12 | 2 |
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
04.02.2013, 20:40 | 4 |
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
04.02.2013, 22:22 | 6 |
пока не имеются
0
|
angstrom
|
|
04.02.2013, 23:21 | 7 |
А почему файлы должны совпадать? Совпадать должны битовые карты, а вот как сохранится в png - кодек его знает.
|
angstrom
|
|
04.02.2013, 23:32 | 9 |
Скинь архив, поэкспериментировать.
|
05.02.2013, 03:23 [ТС] | 10 | ||||||||||
Короче ковыряю исходники pngimage.pas
И что я вижу? Эти котопсы вообще никак не используют Extra-поле! Если при чтение ещё читается(обратите внимание на формальный параметр Extra):
Самое печальное то чтобы исправить это мне необходимо будет переписать минимум 8шт объявления методов. Добавлено через 2 часа 47 минут Удалил все стандартные Vcl.Imaging.pngimage.dcu. Теперь не находит Vcl.Imaging.pngimage. Как сгенерить стандартные dcu? Build All, Make, Compile не помогает
0
|
angstrom
|
|
05.02.2013, 04:18 | 11 |
Скомпилировать не проблема (копируешь в любой другой каталог и собираешь), но вот размер и дата создания будут отличаться от оригинальных.
|
05.02.2013, 15:22 [ТС] | 12 |
Да. Как лёг спать сразу об этом подумал. Сейчас другим занимаюсь. Может быть позже выложу рабочий pngimage.pas. Думаю вообще переименовать этот модуль. А стандартный не использовать вообще.
А что? за этим кроются очередные грабли в кустах?
0
|
angstrom
|
|
05.02.2013, 15:44 | 13 |
Дельфи очень не любит, когда дата dcu файлов отличается от остальных в сборке.
|
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
|
|
06.02.2013, 19:31 | 14 |
Могу предложить изврат... Формат PNG 16bit grayscale (запись которого не поддерживается в pngimage) и формат 8bit grayscale+alpha, фактически отличаются только заголовком. Создаем обычный 8bit grayscale+alpha, раскидываем младшую и старшую часть слова между изображением и альфой, записываем, после чего подправляем заголовок.
как-то так: Код
var i: integer; scan: pByteArray; tmp1,tmp2: TMemoryStream; begin tmp1:=TMemoryStream.Create; tmp2:=TMemoryStream.Create; with TPNGObject.CreateBlank(COLOR_GRAYSCALEALPHA,8,256,1) do begin scan:=Scanline[0]; for i:=0 to 255 do scan[i]:=i; scan:=AlphaScanline[0]; for i:=0 to 255 do scan[i]:=255-i; SaveToStream(tmp1); Free; end; with TPNGObject.CreateBlank(COLOR_GRAYSCALE,16,256,1) do begin SaveToStream(tmp2); Free; end; CopyMemory(Pointer(DWORD(tmp1.Memory)+16), Pointer(DWORD(tmp2.Memory)+16), 17); tmp1.SaveToFile('16bit.png'); tmp1.Free; tmp2.Free;
1
|
06.02.2013, 20:09 [ТС] | 15 |
x128, Да хотелось бы именно через 16bit grayscale. Потому что, как мне кажется, сжатие будет лучше и адекватная картинка при просмотре стандартными средствами, которые обычно нормально сделаны и поддерживают все форматы PNG. Извратится можно и по другому: Создать обычный png с COLOR_RGB и записывать только например в R и G, а B оставить пустым.
Не дочитал: Интересный вариант. И это Работает? Всмысле, если потом загрузить этот подправленный png он адекватно везде отобразится?
0
|
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
|
|
06.02.2013, 20:20 | 16 |
snake32, в итоге получится обычный 16bit grayscale, на сжатии или понимании его другими программами это не скажется. Собственно, пример который я привел, создает изображение 256х1 с переходом, я хотел убедиться, что все получится =)
1
|
2 / 2 / 1
Регистрация: 21.04.2013
Сообщений: 14
|
|
21.04.2013, 18:52 | 18 |
snake32, ты решил этот вопрос? Если да, поделись пожалуйста решением
0
|
21.04.2013, 18:52 | |
21.04.2013, 18:52 | |
Помогаю со студенческими работами здесь
18
Нужно сохранить результат в png, a не в bmp Можно ли сохранить файл .png в виде двоичного файла? Сохранить в файл png изображение из bufferimage с сохранением прозрачности Получить иконку в формате ico и сохранить ее в формате png Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |