-
Вопрос, наверное, к создателю- Дмитрию Матвееву. Дмитрий, не могли-бы вы выложить пример работы с KOLJPGImage ? я пробовал по аналогии с JpegObj, но налицо явное расхождение в методах.
-
Ну примерно так. ... {$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. Они соответственно могут влиять на размер еще, качество кодирования\декодирования, уровень обработки ошибок.
-
Кстати есть еще CxKOLTiffJpg. Он побыстрее будет. Я в основном ориентировался на Lazarus+WinCE.
-
И не только побыстрее. Я в него добавил возможность работать с jpeg'ами практически любого размера, не выделяя память для всей картинки. Можно получать или передавать строки пикселей для упаковки или наоборот для распаковки через событие. Сегодня проверил как раз, работает.
-
-
kolmck.net
-
> JPEGImage.Bitmap.Draw(Form.Canvas.Handle, 100, 100); //рисуем > ее
Почему-то не помогает... Может быть, слово Form нужно заменить на что-то другое? (Но тогда на что? Form1 и KOLForm1 не проходят...) И ещё: что означают второй и третий параметры?
-
У меня работает, хотя конечно нужно в OnPain рисовать.
> И ещё: что означают второй и третий параметры?
Координаты X и Y, где рисовать.
-
Кстати, если кому нужно для КПК, я сделал чтение для BMP, GIF, JPG, PNG, XBM системными средствами, т.е. к коду практически ничего и не добавляется.
-
> У меня работает, хотя конечно нужно в OnPain рисовать.
А вот об этом я не подумал... Тогда, получается, надо добавить код: JPEGImage.OnPaint:= OnPaint?
-
OnPaint того, на ком рисовать хотите. Например Form.OnPaint, хотя обычно PaintBox используют.
-
Гм... А помимо OnPaint ничего похожего поставить нельзя? Просто там ситуация такая: при запуске на форме должна быть картинка. Затем её можно будет убрать, сняв в главном меню галочку, и вернуть, поставив таковую обратно. Как реализовать, не знаю - на if MainMenu1.Items[x].Checked then ... не реагирует...
-
И в чем проблемма? Вот рабочий код: .... 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;
-
В том-то и дело, что при первом запуске он эту галочку в главном меню не видит и ничего не рисует!
-
Удивительное рядом... Поставил чекбокс не в меню - картинка появилась...
-
Ничего не понимаю. при использовании ImageDecompress компилятор выдаёт:
D:\lazarus\kol\kol\ImageDecompress.pas(67,48) Fatal: Can't find unit TextOut used by ImageDecompress
-
> Ничего не понимаю.
И что же тут непонятно? Убить нафиг модуль TextOut! :D
-
Кстати, для информации, по поводу ImageDecompress. При декодировании Jpeg, для некоторых картинок скорость может быть в несколько раз меньше (чуть ли не на порядок), чем у JpegImage, хотя обычно, примерно равны (небольшие отклонения в разные стороны). При декодировании PNG, ImageDecompress обычно немного побыстрее. Остальные форматы не тестил, за ненадобностью.:)
-
Вчера пробовал ImageDecompress, textout убить догадался, но когда пишу
uses ImageDecompress; ......... Var Image:PImageDecompress; ......... procedure TForm1.Button1Click(Sender: PObj); begin image:=NewImageDecompress; image.LoadFromFile('0933333.jpg'); // когда эту строчку пишу, то вываливается с ошибкой типа не могу запуститься потому что imgdecmp.dll не найдена, переустановка приложения (какого?) может исправит проблему. Покопал в интернете, толком не нашел. Какой выход есть из данной ситуации? XPSP2
-
сорри, торможу :)
-
При запуске под WinCE 5.0 (Aser n311) при использовании ImageDecompress программа выдаёт Runtime error 216 странно
-
вот такой код :
...
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;
-
пардон :) вот такой :
...
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; до показа основной формы, тоже не помогает
-
а если так: if Image <> nil then
Image.Bitmap.Draw(DC, 0, 0);
-
хм.. удивительное рядом. удалил PaintBox с формы, и бросил заново. на рантайм ругаться перестало, но картинку не показывает. есть-ли какаято специфика работы с LoadFromFile в WinCE ?
-
может полный путь к картинке указать?
-
хм.. путь к файлу может меняться. никто ведь не знает, куда завтра мне взбредёт в голову положить программу и картинки. так что это не выход в любом случае, я думаю.
-
Попробовал, работает, скорее всего файл не находит, поэтому ничего не загружается, поэтому 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;
-
мда.. как говорится, "толи лыжи не едут, толи я..." вот такой код:
unit Unit1;
interface
uses Windows, Messages, KOL ,ImageDecompress
, Forms, mirror, Classes, Controls, mckCtrls, mckObjs, Graphics;
;
type
TForm1 = class; PForm1 = TForm1; PForm1 = ^TForm1;
TForm1 = classobject(TFormTObj)
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
public
end;
var
Form1 : PForm1 : TForm1 ;
procedure NewForm1( var Result: PForm1; AParent: PControl );
implementation
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.
не работает :( не вылетает, но и не работает..
-
продолжаю танцы с бубном.. плюнул на визуальную разработку и написал вот так :
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, 20, 20);
end;
Procedure OpenPic ; 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 и там и там
-
гы.. пардон, ничаяно 2 раза вставил
PB^.OnPaint := TOnPaint( MakeMethod( nil, @DrawPaint ) );
у меня в исходнике одна.. но сути это не меняет.. как не работало, так и не работает :(
-
если не трудно, попробуйте пожалуйста скомпилировать у себя , возможно у меня с компилятором проблемы ?
я работаю на:
Lazarus-0.9.23-fpc-2.2.0-20071019-win32 fpc-2.2.0.arm-wince kolce_rev247
-
ошибка рантайма вылетает сразу при запуске. проблема явно в этой процедуре:
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;
если её содержимое закомментировать , то вылета ошибки рантайма нет.
-
> ошибка рантайма вылетает сразу при запуске.
правильно. jpg-то не создан.
-
урааааа.. !!!!!!!! заработало.. всем спасибо :)
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 ; 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" :)
-
buOpen^.OnClick := TOnEvent( MakeMethod( nil, @OpenPic ) );
Procedure OpenPic ;//( Dummy : Pointer; Sender : PControl );
по-моему явная ошибка
-
проще всего
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, коли руки кривы :)
-
Я не жалуюсь на миррор, просто всю жизнь писал исключительно на ассемблере, и не привык к требованиям обьявления и инициализации переменных в ЯВУ. Поэтому и чистый КОL мне роднее и понятней :)
-
Удалено модератором
-
Удалено модератором
|