Текущий архив: 2004.05.30;
Скачать: CL | DM;
ВнизКак пользоваться KOLPNG Найти похожие ветки
← →
-=mixir=- © (2003-05-31 14:50) [0]Хочу написать конвертор 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.
← →
Кладов (2003-05-31 15:17) [1]
> {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 просто очень хорошо сжимает черный битмап :)
← →
-=mixir=- © (2003-05-31 16:18) [2]Я уже пробовал и так:
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 17:31) [3]осталось во втором примере сразу за bmp.LoadFromFile сделать bmp.SaveToFile( "loaded.bmp" ); и убедиться, что битмап не грузится. Или имя не то, или путь надо точный указывать. Я всегда пишу GetStartDir + имя, помогает.
← →
Кладов (2003-05-31 19:44) [4]а кстати, какой формат у того мегабайтного битмапа, не 256 цветов случаем?
Что будет, если bmp.loadfromfile добавить bmp.PixelFormat := pf32bit; ?
Кажется, TPNGObject не хочет корректно сохранять картинки с палитрой, точнее сохраняет, но только сам потом и может прочитать - другие программы такой порядок чунков не приемлют. Сейчас я ему поправочку сделаю на этот счет.
← →
-=mixir=- © (2003-06-01 11:05) [5]формат у него 24 бита.
>осталось во втором примере сразу за bmp.LoadFromFile сделать >bmp.SaveToFile( "loaded.bmp" ); и убедиться, что битмап не >грузится. Или имя не то, или путь надо точный указывать. Я >всегда пишу GetStartDir + имя, помогает
Не ну ето не серьезно, мне кажется все дело в KOLPNG,
то что я скачав качав KOLZLIB и KOLPNG при компиляции обнаржил,
что некоторые inflate функции не достыпны в немодуля.
← →
Кладов (2003-06-01 13:15) [6]
> некоторые inflate функции не достыпны в немодуля.
и что, примеры выше при этом не компилировались? я пытаюсь выяснить, что не так в дистрибутиве, и в каком. У меня компилируется без проблем. Может, вы давно скачали KOLPng/KOLZLib, и с тех пор вышло обновление?
← →
-=mixir=- © (2003-06-02 20:54) [7]Не могли бы вы послать мне на мыло (mixShadow@xaker.ru)
свежие KOLZLIB и KOLPNG желательно с примером ?
Заранее благодарен...
← →
Кладов (2003-06-02 21:57) [8]последние лежат на сайте. PNG я обновил вчера (или позавчера), ZLib от какого-то сентября, но у меня точно такой же, и никаких проблем с компиляцией.
← →
Walkboy (2004-01-09 15:27) [9]Хочу вернуться к теме 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. Может в этом причина?
← →
Walkboy (2004-01-09 16:24) [10]Ошибки Undeclared identifier..., которые были до модификации KolZLib, полностью описал azsd сегодня вот в этой теме: bugs report: KOLPNG http://delphimaster.net/view/11-1073629236/
Там же я более полно изложил свой вариант исправления (модификации) библиотеки KolZLib.
Страницы: 1 вся ветка
Текущий архив: 2004.05.30;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.037 c