Текущий архив: 2010.02.21;
Скачать: 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 вся ветка
Текущий архив: 2010.02.21;
Скачать: CL | DM;
Память: 0.54 MB
Время: 0.006 c