Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как пользоваться KOLPNG


-=mixir=- ©   (2003-05-31 14:50:00) 

Хочу написать конвертор BMP>PNG,
юзаю KOLPNG не ничего не работает.

Вот код, подскажите где ошибка.

uses kolpng,kol;

{$R *.res}

var png:PPngObject;
   bmp:PBitmap;

begin
{creating}
png:=NewPngObject;
bmp:=NewBitmap(50,50);

{initializing}
bmp.PixelFormat:=pf16bit;
bmp.Canvas.Rectangle(0,0,49,49);
bmp.Canvas.TextOut(10,10,'PNG Sample');

{Assign}

png.CompressionLevel:=9;
png.AssignHandle(bmp.Handle,false,0); // Не пашет!
if png.Error<> ErrOK then Showmessage('Error');
png.SaveToFile('NewBmp.png'); // 44 байта размер файла NewBmp.png

png.Free;
bmp.Free;

end.


Walkboy   (2004-01-09 16:24:00) [1]

Ошибки Undeclared identifier..., которые были до модификации KolZLib, полностью описал azsdсегодня вот в этой теме: bugs report: KOLPNG http://www.delphimaster.ru/cgi-bin/forum.pl?id=1073629236&n=10
Там же я более полно изложил свой вариант исправления (модификации) библиотеки KolZLib.


Walkboy   (2004-01-09 15:27:00) [2]

Хочу вернуться к теме KolPNG.
Я столкнулся с такой же проблемой, что и -=mixir=-полгода назад.

1. По поводу того, что не так в дистрибутивах:
Да, Владимир, у меня KolPNG в том виде, в котором она есть, компилироваться отказалась. Она использует набор inflate-/deflate-функций библиотеки KolZLib. В KolZLib мне пришлось повторить описание этих функций в секции Interface: (блоки функций, озаглавленные:
// deflate compresses data
// inflate decompresses data).
В эту же секцию из секции implementationя перенес const.
После этих манипуляций KolPNG откомпилировалась (ранее выдавала ошибки: Undeclared identifier).

2. Очень странно ведет себя процедура AssignHandle.
Вот текст программы, которая прекрасно отрабатывает:
program Sample;
{$APPTYPE CONSOLE}
uses KOL, KOLPng;

var Png:PPngObject;
   Bmp:PBitmap;

begin
    Png := NewPngObject;
    Png.LoadFromFile('t:\asd.png');
    Png.SaveToFile('t:\asd2.png');
    Png.Free;
end.

В результате создается новый PNG-файл. Никаких нареканий на работу. PNG-файлы, сделанные Adobe ImageReady сжимает процентов на 10-25.
Проблемы начинаются, когда необходимо сжать BMP-файл. Вот тело программы:
    Bmp := NewBitmap( 0, 0 );
    Bmp.LoadFromFile('t:\asd.bmp');
    Png := NewPngObject;
    Png.AssignHandle( Bmp.Handle, FALSE, 0 );
    Png.SaveToFile('t:\asd2.png');
    Png.Free; Bmp.Free;

В результате выполнения этого кода создается PNG-файл размером 44 байта.
В процедуре AssignHandle, насколько я понимаю, некорректно отрабатывает BuildHeader. При трассировке именно эта процедура показывет странные результаты (например, свойства Header после присвоения им новых значений не изменяются). Проверял на PNG- и BMP-файлах разрешения 800х600, глубина цвета: 24 бита.
Использую:
OS:   WinXP SP1 Pro Eng;
App:  Delphi 5;
Unit: KOL 1.87; KolPNG v2.1.174; KolZLib v3.179;

3. Иполняемый Файл GrabScreen работает без проблем, а скомпилированый из исходников создает 44-х байтные файлы. Пытался читать про исходники PNG - там что-то говорится про использование MMX. У меня процессор АМД Аthlon XP. Может в этом причина?


Кладов   (2003-06-02 21:57:00) [3]

последние лежат на сайте. PNG я обновил вчера (или позавчера), ZLib от какого-то сентября, но у меня точно такой же, и никаких проблем с компиляцией.


-=mixir=-   (2003-06-02 20:54:00) [4]

Не могли бы вы послать мне на мыло (mixShadow@xaker.ru)
свежие KOLZLIB и KOLPNG желательно с примером ?
Заранее благодарен...


Кладов   (2003-06-01 13:15:00) [5]


> некоторые inflate  функции не достыпны в немодуля.

и что, примеры выше при этом не компилировались? я пытаюсь выяснить, что не так в дистрибутиве, и в каком. У меня компилируется без проблем. Может, вы давно скачали KOLPng/KOLZLib, и с тех пор вышло обновление?


-=mixir=-   (2003-06-01 11:05:00) [6]

формат у него 24 бита.

>осталось во втором примере сразу за bmp.LoadFromFile сделать >bmp.SaveToFile( 'loaded.bmp' ); и убедиться, что битмап не >грузится. Или имя не то, или путь надо точный указывать. Я >всегда пишу GetStartDir + имя, помогает

Не ну ето не серьезно, мне кажется все дело в KOLPNG,
то что я скачав качав KOLZLIB и KOLPNG при компиляции обнаржил,
что некоторые inflate  функции не достыпны в немодуля.



Кладов   (2003-05-31 19:44:00) [7]

а кстати, какой формат у того мегабайтного битмапа, не 256 цветов случаем?

Что будет, если bmp.loadfromfile добавить bmp.PixelFormat := pf32bit; ?

Кажется, TPNGObject не хочет корректно сохранять картинки с палитрой, точнее сохраняет, но только сам потом и может прочитать - другие программы такой порядок чунков не приемлют. Сейчас я ему поправочку сделаю на этот счет.


Кладов   (2003-05-31 17:31:00) [8]

осталось во втором примере сразу за bmp.LoadFromFile сделать bmp.SaveToFile( 'loaded.bmp' ); и убедиться, что битмап не грузится. Или имя не то, или путь надо точный указывать. Я всегда пишу GetStartDir + имя, помогает.


-=mixir=-   (2003-05-31 16:18:00) [9]

Я уже пробовал и так:

uses kolpng,kol;

{$R *.res}

var png:PPngObject;
  bmp:PBitmap;

begin
{creating}
png:=NewPngObject;
bmp:=NewBitmap(50,50);

bmp.loadfromfile('ScrinShot.bmp');  // 2,5  мега весить Bmp
png.CompressionLevel:=9;
png.AssignHandle(bmp.Handle,false,0);

if png.Error<> ErrOK then Showmessage('Error');
png.SaveToFile('NewBmp.png');
png.Free;
bmp.Free;
end.


и всеравно не пашет, и даже размер не изменился :(


Кладов   (2003-05-31 15:17:00) [10]


> {initializing}
> bmp.PixelFormat:=pf16bit;
bmp.Canvas.Brush.Color := clYellow; > bmp.Canvas.Rectangle(0,0,49,49);
> bmp.Canvas.TextOut(10,10,'PNG Sample');

А что 44 байта, то png просто очень хорошо сжимает черный битмап :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо