Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Вниз

Где можно посмотреть пример работы с 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 вся ветка

Форум: "KOL";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.01 c
11-1211446971
Vinum
2008-05-22 13:02
2010.02.21
"Оптимизировать" загрузку картинки


11-1211744515
Vinum
2008-05-25 23:41
2010.02.21
Как сделать диалог


15-1260658521
Германн
2009-12-13 01:55
2010.02.21
Blacklist в почтовых (email) сообщениях.


1-1238433962
Enlight
2009-03-30 21:26
2010.02.21
"Правильная" идентификация события ухода мыши с формы.


15-1260368206
medic357
2009-12-09 17:16
2010.02.21
Задачки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский