Вниз
Скачать: CL | DM;

Где можно посмотреть пример работы с KOLJPGImage?   Найти похожие ветки 

← →
Дмитрий Пырин   (2007-10-23 13:44) [0]

Вопрос, наверное, к создателю- Дмитрию Матвееву.
Дмитрий, не могли-бы вы выложить пример работы с KOLJPGImage ?
я пробовал по аналогии с JpegObj, но налицо явное расхождение в методах.


← →
mdw ©   (2007-10-23 13:58) [1]

Ну примерно так.
...
 {$IFDEF KOLCLASSES}{$I TMainForm.inc}{$ELSE} TMainForm = object(TObj) {$ENDIF}
...
 private
   procedure OnProgress (Sender: PObj);
 public
   JPEGImage: PJPEGImage;
 end;

....
procedure TMainForm.KOLForm1FormCreate(Sender: PObj);
begin
   JPEGImage:= NewJPEGImage; //Создаем
   JPEGImage.OnProgress:= OnProgress; //если нужно
end;

procedure TMainForm.KOLForm1Destroy(Sender: PObj);
begin
   JPEGImage.Free; //разрушаем
end;

procedure TMainForm.Button1Click(Sender: PObj);
begin
   try
     JPEGImage.LoadFromFile("C:\!.jpg"); //Загружаем картинку
     JPEGImage.Bitmap.Draw(Form.Canvas.Handle, 100, 100); //рисуем ее

     JPEGImage.Bitmap.LoadFromFile("!!.bmp"); //изменяем изображение
     JPEGImage.SaveToFile("!!!!!!!.jpg");  //Сохраняем jpeg
   except {on E: Exception do}
     ShowMessage("Error");     //Ошибка!!!!!!!!
   end;
end;

procedure TMainForm.OnProgress(Sender: PObj);
begin
   ProgressBar.Progress:= JPEGImage.Progress;
   Applet.ProcessMessages;
//    Sleep(20); //:)
end;

Еще можно поиграться опциями в JCONFIG.INC. Они соответственно могут влиять на размер еще, качество кодирования\декодирования, уровень обработки ошибок.


← →
mdw ©   (2007-10-23 14:00) [2]

Кстати есть еще CxKOLTiffJpg. Он побыстрее будет. Я в основном ориентировался на Lazarus+WinCE.


← →
Vladimir Kladov ©   (2007-10-23 15:58) [3]

И не только побыстрее. Я в него добавил возможность работать с jpeg"ами практически любого размера, не выделяя память для всей картинки. Можно получать или передавать строки пикселей для упаковки или наоборот для распаковки через событие. Сегодня проверил как раз, работает.


← →
Дмитрий Пырин   (2007-10-27 21:19) [4]

где взять CxKOLTiffJpg ?  в компонентах на http://kolnmck.ru его нет :(


← →
Vladimir Kladov ©   (2007-10-27 22:03) [5]

kolmck.net


← →
Сидор   (2008-02-13 17:03) [6]


>   JPEGImage.Bitmap.Draw(Form.Canvas.Handle, 100, 100); //рисуем
> ее

Почему-то не помогает... Может быть, слово Form нужно заменить на что-то другое? (Но тогда на что? Form1 и KOLForm1 не проходят...)
И ещё: что означают второй и третий параметры?


← →
mdw ©   (2008-02-13 22:10) [7]

У меня работает, хотя конечно нужно в OnPain рисовать.

> И ещё: что означают второй и третий параметры?

Координаты X и Y, где рисовать.


← →
mdw ©   (2008-02-13 22:15) [8]

Кстати, если кому нужно для КПК, я сделал чтение для BMP, GIF, JPG, PNG, XBM системными средствами, т.е. к коду практически ничего и не добавляется.


← →
Сидор   (2008-02-14 11:50) [9]


> У меня работает, хотя конечно нужно в OnPain рисовать.

А вот об этом я не подумал...
Тогда, получается, надо добавить код:
JPEGImage.OnPaint:= OnPaint?


← →
mdw ©   (2008-02-14 15:53) [10]

OnPaint того, на ком рисовать хотите. Например Form.OnPaint, хотя обычно PaintBox используют.


← →
Сидор   (2008-02-15 15:09) [11]

Гм... А помимо OnPaint ничего похожего поставить нельзя?
Просто там ситуация такая: при запуске на форме должна быть картинка. Затем её можно будет убрать, сняв в главном меню галочку, и вернуть, поставив таковую обратно. Как реализовать, не знаю - на if MainMenu1.Items[x].Checked then ... не реагирует...


← →
mdw ©   (2008-02-15 17:27) [12]

И в чем проблемма? Вот рабочий код:
....
 private
   FJPEGImage: PJPEGImage;
 public
.....
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
begin
   FJPEGImage:= NewJPEGImage;
   FJPEGImage.LoadFromFile("Disk.jpg");
end;

procedure TForm1.KOLForm1Paint(Sender: PControl; DC: HDC);
begin
   if CheckBox1.Checked then FJPEGImage.Bitmap.Draw(DC, 0, 0);
end;

procedure TForm1.CheckBox1Click(Sender: PObj);
begin
   Form.Invalidate;
end;


← →
Сидор   (2008-02-16 15:57) [13]

В том-то и дело, что при первом запуске он эту галочку в главном меню не видит и ничего не рисует!


← →
Сидор   (2008-02-16 16:02) [14]

Удивительное рядом... Поставил чекбокс не в меню - картинка появилась...


← →
Дмитрий Пырин   (2008-04-01 14:51) [15]

Ничего не понимаю.
при использовании  ImageDecompress компилятор выдаёт:

D:\lazarus\kol\kol\ImageDecompress.pas(67,48) Fatal: Can"t find unit TextOut used by ImageDecompress


← →
mdw ©   (2008-04-01 17:31) [16]


> Ничего не понимаю.

И что же тут непонятно? Убить нафиг модуль TextOut! :D


← →
mdw ©   (2008-04-01 17:37) [17]

Кстати, для информации, по поводу ImageDecompress.
При декодировании Jpeg, для некоторых картинок скорость может быть в несколько раз меньше (чуть ли не на порядок), чем у JpegImage, хотя обычно, примерно равны (небольшие отклонения в разные стороны).  
При декодировании PNG, ImageDecompress обычно немного побыстрее. Остальные форматы не тестил, за ненадобностью.:)


← →
Vinum   (2008-04-01 17:54) [18]

Вчера пробовал ImageDecompress, textout убить догадался, но когда пишу

uses ImageDecompress;
.........
Var Image:PImageDecompress;
.........
procedure TForm1.Button1Click(Sender: PObj);
begin
image:=NewImageDecompress;
image.LoadFromFile("0933333.jpg"); // когда эту строчку пишу, то вываливается с ошибкой типа не могу запуститься потому что imgdecmp.dll не найдена, переустановка приложения (какого?) может исправит проблему. Покопал в интернете, толком не нашел. Какой выход есть из данной ситуации?
XPSP2


← →
Vinum   (2008-04-01 22:24) [19]

сорри, торможу :)


← →
Дмитрий Пырин   (2008-04-02 07:55) [20]

При запуске под WinCE 5.0 (Aser n311)  при использовании  ImageDecompress
программа выдаёт
Runtime error 216
странно


← →
Дмитрий Пырин   (2008-04-02 08:27) [21]

вот такой код :


...
 private
   Image:PImageDecompress;
...

procedure TForm1.Button1Click(Sender: PObj);
begin
 image.LoadFromFile("1.jpg");
 image:=NewImageDecompress;
end;

procedure TForm1.PaintBox1Paint(Sender: PControl; DC: HDC);
begin
Image.Bitmap.Draw(DC, 0, 0);
end;  


← →
Дмитрий Пырин   (2008-04-02 08:28) [22]

пардон :)

вот такой :


...
private
  Image:PImageDecompress;
...

procedure TForm1.Button1Click(Sender: PObj);
begin
image:=NewImageDecompress;
image.LoadFromFile("1.jpg");
end;

procedure TForm1.PaintBox1Paint(Sender: PControl; DC: HDC);
begin
Image.Bitmap.Draw(DC, 0, 0);
end;


пробовал  вставить   image:=NewImageDecompress;   до показа основной формы, тоже не помогает


← →
Дмитрий К ©   (2008-04-02 08:37) [23]

а если так:
if Image <> nil then
 Image.Bitmap.Draw(DC, 0, 0);


← →
Дмитрий Пырин   (2008-04-02 08:58) [24]

хм.. удивительное рядом.
удалил PaintBox с формы, и бросил заново. на рантайм ругаться перестало, но картинку не показывает.
есть-ли какаято специфика работы с  LoadFromFile  в WinCE ?


← →
D[u]fa   (2008-04-02 10:29) [25]

может полный путь к картинке указать?


← →
Дмитрий Пырин   (2008-04-02 10:44) [26]

хм.. путь к файлу может меняться. никто ведь не знает, куда завтра мне взбредёт в голову положить программу и картинки. так что это не выход в любом случае, я думаю.


← →
mdw ©   (2008-04-02 12:00) [27]

Попробовал, работает, скорее всего файл не находит, поэтому ничего не загружается, поэтому Bitmap = nil, поэтому и валится.

procedure TForm1.KOLFormFormCreate(Sender: PObj);
......
   FImg:= NewImageDecompress;
   FImg.LoadFromFile(ExtractFilePath(ParamStr(0))+"getImage.jpg");
...

procedure TTextOutForm.PaintBox1Paint(Sender: PControl; DC: HDC);
begin
   if (FImg.Bitmap <> nil) and not FImg.Bitmap.Empty then FImg.Bitmap.Draw(DC, 0, 0);
end;


← →
Дмитрий Пырин   (2008-04-02 12:25) [28]

мда.. как говорится, "толи лыжи не едут, толи я..."

вот такой код:

{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
{$ifdef FPC} {$mode delphi} {$endif}
unit Unit1;

interface

uses Windows, Messages, KOL {place your units here->},ImageDecompress
{$IFDEF LAZIDE_MCK}, Forms, mirror, Classes, Controls, mckCtrls, mckObjs, Graphics;
{$ELSE} ; {$ENDIF}

type

 { TForm1 }

 {$I MCKfakeClasses.inc}
 {$IFDEF KOLCLASSES} TForm1 = class; PForm1 = TForm1; {$ELSE OBJECTS} PForm1 = ^TForm1; {$ENDIF CLASSES/OBJECTS}
 TForm1 = {$IFDEF KOLCLASSES}class{$ELSE}object{$ENDIF}({$IFDEF LAZIDE_MCK}TForm{$ELSE}TObj{$ENDIF})
   Button1: TKOLButton;
   ButtonForward: TKOLButton;
   ButtonBack: TKOLButton;
   Form: PControl;
   KOLForm1: TKOLForm;
   KOLProject1: TKOLProject;
   Memo1: TKOLMemo;
   PaintBox1: TKOLPaintBox;
   ProgressBar1: TKOLProgressBar;
   Image:PImageDecompress;
   procedure Button1Click(Sender: PObj);
   procedure PaintBox1Paint(Sender: PControl; DC: HDC);
 private
   { private declarations }
 public
   { public declarations }
 end;

var
 Form1 {$IFDEF KOL_MCK} : PForm1 {$ELSE} : TForm1 {$ENDIF} ;

{$IFDEF KOL_MCK}
procedure NewForm1( var Result: PForm1; AParent: PControl );
{$ENDIF}

implementation

{$IFDEF KOL_MCK}
{$I unit1_1.inc}
{$ENDIF}

{ TForm1 }

procedure TForm1.Button1Click(Sender: PObj);
begin
 image:=NewImageDecompress;
 image.LoadFromFile(ExtractFilePath(ParamStr(0))+"1.jpg");
end;

procedure TForm1.PaintBox1Paint(Sender: PControl; DC: HDC);
begin
 if (image.Bitmap <> nil) and not image.Bitmap.Empty then image.Bitmap.Draw(DC, 20, 20);
end;

initialization

end.  


не работает :(
не вылетает, но и не работает..


← →
Дмитрий Пырин   (2008-04-02 12:59) [29]

продолжаю танцы с бубном.. плюнул на визуальную разработку и написал вот так :

program project1;
{$mode objfpc}{$H+}
uses
KOL,Windows,Messages,ImageDecompress;

var
Form,
pTop,
PB,
buOpen,
SBox:pControl;
JPG:PImageDecompress;

procedure DrawPaint( Dummy: Pointer; Sender: PControl; DC: HDC );
begin
if (JPG^.Bitmap <> nil) and not JPG^.Bitmap^.Empty then JPG^.Bitmap^.Draw(DC, 20, 20);

end;
///////////////////////////////////////////////////////////
Procedure OpenPic ;//( Dummy : Pointer; Sender : PControl );
begin
jpg:=NewImageDecompress;
jpg^.LoadFromFile(ExtractFilePath(ParamStr(0))+"1.jpg");
PB^.Width :=  JPG^.Bitmap^.Width ;
PB^.Height:=  JPG^.Bitmap^.Height;

end;

begin

Applet := NewApplet("Pixie");
Form := NewForm(Applet,"Pixie");

// -------- интерфейс -----------------------------
pTop := NewPanel(Form,esRaised)^. SetAlign(caTop);
pTop^.Height := 35;

buOpen := NewButton(pTop,"show")^.SetAlign(caLeft);
buOpen^.OnClick := TOnEvent( MakeMethod( nil, @OpenPic ) );
SBox := NewScrollBoxEx(Form,esLowered)^.SetAlign(caClient);
PB := NewPaintBox(SBox);
PB^.OnPaint := TOnPaint( MakeMethod( nil, @DrawPaint ) );
PB^.OnPaint := TOnPaint( MakeMethod( nil, @DrawPaint ) );
// -------------------------------------------------------

run(Applet);

end.                


снова полезло "Runtime error 216"
причём что на КПК, что в эмуляторе проблема одинаковая.

WinCE 5.0  и там и там


← →
Дмитрий Пырин   (2008-04-02 13:03) [30]

гы.. пардон, ничаяно 2 раза вставил

PB^.OnPaint := TOnPaint( MakeMethod( nil, @DrawPaint ) );


у меня в исходнике одна.. но сути это не меняет.. как не работало, так и не работает :(


← →
Дмитрий Пырин   (2008-04-02 13:08) [31]

если не трудно, попробуйте пожалуйста скомпилировать у себя , возможно у меня с компилятором проблемы ?

я работаю на:

Lazarus-0.9.23-fpc-2.2.0-20071019-win32
fpc-2.2.0.arm-wince
kolce_rev247


← →
Дмитрий Пырин   (2008-04-02 13:16) [32]

ошибка рантайма вылетает сразу при запуске.
проблема явно в этой процедуре:

procedure DrawPaint( Dummy: Pointer; Sender: PControl; DC: HDC );
begin
if (JPG^.Bitmap <> nil) and not JPG^.Bitmap^.Empty then JPG^.Bitmap^.Draw(DC, 20, 20);
end;


если её содержимое закомментировать , то вылета ошибки рантайма нет.


← →
Дмитрий К ©   (2008-04-02 13:22) [33]


> ошибка рантайма вылетает сразу при запуске.

правильно. jpg-то не создан.


← →
Дмитрий Пырин   (2008-04-02 13:34) [34]

урааааа.. !!!!!!!!
заработало.. всем спасибо :)


program project1;
uses
KOL,Windows,Messages,ImageDecompress;

var
Form,
pTop,
PB,
buOpen,
SBox:pControl;
JPG:PImageDecompress;

procedure DrawPaint( Dummy: Pointer; Sender: PControl; DC: HDC );
begin
if (JPG^.Bitmap <> nil) and not JPG^.Bitmap^.Empty then JPG^.Bitmap^.Draw(DC, 0, 0);
end;

Procedure OpenPic ;//( Dummy : Pointer; Sender : PControl );
begin
jpg^.LoadFromFile(ExtractFilePath(ParamStr(0))+"f.jpg");
PB^.Width :=  JPG^.Bitmap^.Width ;
PB^.Height:=  JPG^.Bitmap^.Height;
end;
//=======================================
begin
Applet := NewApplet("Pixie");
Form := NewForm(Applet,"Pixie");
jpg:=NewImageDecompress;
// --------интерфейс -----------------------------
pTop := NewPanel(Form,esRaised)^. SetAlign(caTop);
pTop^.Height := 35;

buOpen := NewButton(pTop,"show")^.SetAlign(caLeft);
buOpen^.OnClick := TOnEvent( MakeMethod( nil, @OpenPic ) );
SBox := NewScrollBoxEx(Form,esLowered)^.SetAlign(caClient);
PB := NewPaintBox(SBox);
PB^.OnPaint := TOnPaint( MakeMethod( nil, @DrawPaint ) );
// -------------------------------------------------------

run(Applet);

end.  


ЗЫ:
больше я в МСК ни ногой :(  только PURE KOL .. как в тьюторе по МАСМ-у написано "PURE and SIMPLE" :)


← →
D[u]fa   (2008-04-02 14:17) [35]

buOpen^.OnClick := TOnEvent( MakeMethod( nil, @OpenPic ) );

Procedure OpenPic ;//( Dummy : Pointer; Sender : PControl );

по-моему явная ошибка


← →
GMax   (2008-04-02 22:55) [36]

проще всего

procedure DrawPaint( Dummy: Pointer; Sender: PControl; DC: HDC );
begin
if (JPG<>nil) and (JPG^.Bitmap <> nil) and not JPG^.Bitmap^.Empty then JPG^.Bitmap^.Draw(DC, 20, 20);
end;

и не жаловаться на Mirror, коли руки кривы :)


← →
Дмитрий Пырин   (2008-04-03 07:15) [37]

Я не жалуюсь на миррор, просто всю жизнь писал исключительно на ассемблере, и не привык к требованиям обьявления и инициализации переменных в ЯВУ. Поэтому и чистый КОL мне роднее и понятней :)


← →
имя   (2008-05-29 23:36) [38]

Удалено модератором


← →
имя   (2008-05-30 03:12) [39]

Удалено модератором



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.55 MB
Время: 0.008 c
2-1261409951
JohnKorsh
2009-12-21 18:39
2010.02.21
API для беспроводных сетей.


15-1259764153
MBo
2009-12-02 17:29
2010.02.21
Фильтр Савицкого-Голея и иже с ним


2-1261476735
Евгений11111
2009-12-22 13:12
2010.02.21
Обход в цикле элементов (Edit1, Edit2, Edit3 и т.д.)одного класса


1-1238011378
AssemblerIA64
2009-03-25 23:02
2010.02.21
Длинное деление: проблема с остатком


11-1174919254
ElectriC
2007-03-26 18:27
2010.02.21
Горизонтальная полоса прокрутки в ListBox




   Наверх