Конференция "KOL" » Где можно посмотреть пример работы с KOLJPGImage? [Lazarus, WinCE]
 
  • Дмитрий Пырин (23.10.07 13:44) [0]
    Вопрос, наверное, к создателю- Дмитрию Матвееву.
    Дмитрий, не могли-бы вы выложить пример работы с KOLJPGImage ?
    я пробовал по аналогии с JpegObj, но налицо явное расхождение в методах.
  • mdw © (23.10.07 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 © (23.10.07 14:00) [2]
    Кстати есть еще CxKOLTiffJpg. Он побыстрее будет. Я в основном ориентировался на Lazarus+WinCE.
  • Vladimir Kladov © (23.10.07 15:58) [3]
    И не только побыстрее. Я в него добавил возможность работать с jpeg'ами практически любого размера, не выделяя память для всей картинки. Можно получать или передавать строки пикселей для упаковки или наоборот для распаковки через событие. Сегодня проверил как раз, работает.
  • Дмитрий Пырин (27.10.07 21:19) [4]
    где взять CxKOLTiffJpg ?  в компонентах на http://kolnmck.ru его нет :(
  • Vladimir Kladov © (27.10.07 22:03) [5]
    kolmck.net
  • Сидор (13.02.08 17:03) [6]

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

    Почему-то не помогает... Может быть, слово Form нужно заменить на что-то другое? (Но тогда на что? Form1 и KOLForm1 не проходят...)
    И ещё: что означают второй и третий параметры?
  • mdw © (13.02.08 22:10) [7]
    У меня работает, хотя конечно нужно в OnPain рисовать.

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

    Координаты X и Y, где рисовать.
  • mdw © (13.02.08 22:15) [8]
    Кстати, если кому нужно для КПК, я сделал чтение для BMP, GIF, JPG, PNG, XBM системными средствами, т.е. к коду практически ничего и не добавляется.
  • Сидор (14.02.08 11:50) [9]

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

    А вот об этом я не подумал...
    Тогда, получается, надо добавить код:
    JPEGImage.OnPaint:= OnPaint?
  • mdw © (14.02.08 15:53) [10]
    OnPaint того, на ком рисовать хотите. Например Form.OnPaint, хотя обычно PaintBox используют.
  • Сидор (15.02.08 15:09) [11]
    Гм... А помимо OnPaint ничего похожего поставить нельзя?
    Просто там ситуация такая: при запуске на форме должна быть картинка. Затем её можно будет убрать, сняв в главном меню галочку, и вернуть, поставив таковую обратно. Как реализовать, не знаю - на if MainMenu1.Items[x].Checked then ... не реагирует...
  • mdw © (15.02.08 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;
  • Сидор (16.02.08 15:57) [13]
    В том-то и дело, что при первом запуске он эту галочку в главном меню не видит и ничего не рисует!
  • Сидор (16.02.08 16:02) [14]
    Удивительное рядом... Поставил чекбокс не в меню - картинка появилась...
  • Дмитрий Пырин (01.04.08 14:51) [15]
    Ничего не понимаю.
    при использовании  ImageDecompress компилятор выдаёт:

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

  • mdw © (01.04.08 17:31) [16]

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

    И что же тут непонятно? Убить нафиг модуль TextOut! :D
  • mdw © (01.04.08 17:37) [17]
    Кстати, для информации, по поводу ImageDecompress.
    При декодировании Jpeg, для некоторых картинок скорость может быть в несколько раз меньше (чуть ли не на порядок), чем у JpegImage, хотя обычно, примерно равны (небольшие отклонения в разные стороны).  
    При декодировании PNG, ImageDecompress обычно немного побыстрее. Остальные форматы не тестил, за ненадобностью.:)
  • Vinum (01.04.08 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 (01.04.08 22:24) [19]
    сорри, торможу :)
 
Конференция "KOL" » Где можно посмотреть пример работы с KOLJPGImage? [Lazarus, WinCE]
Есть новые Нет новых   [134431   +14][b:0][p:0.001]