Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.029 c
1-1084535167
WebErr
2004-05-14 15:46
2004.05.30
Create (override?)


14-1084036275
DillerXX
2004-05-08 21:11
2004.05.30
Колобот


3-1084273128
stud
2004-05-11 14:58
2004.05.30
кто работал с квантумгрид


1-1084822229
zep
2004-05-17 23:30
2004.05.30
maskedit


1-1084972249
snake1977
2004-05-19 17:10
2004.05.30
TTreeView