JPG-Bild um 90 Grad drehen

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...

JPG-Bild um 90 Grad drehen

Beitragvon Fraenzken » 12. Feb 2016, 12:47 JPG-Bild um 90 Grad drehen

Hallo,

ich mache gerade meine ersten Schritten in der Bildbearbeitung mit Lazarus.
Ich habe ein kleines Konsolenprogramm geschrieben, um ein JPG-Bild auf der Festplatte um 90° zu drehen:

Code: Alles auswählen
program Drehen;
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, Graphics, GraphType, IntfGraphics
  { you can add units after this };
 
var
  Bild        : TPicture;
  Bmp         : TBitmap;
  Help1, Help2: TLazIntfImage;
  x, y        : INTEGER;
 
begin
  Bild := TPicture.Create;
  Bmp  := TBitmap.Create;
  Bild.LoadFromFile ('C:\Users\Frank Luerweg\Desktop\Fisheye\Test\t.jpg');
  Bmp  := Bild.Bitmap;
 
  Help1 := Bmp.CreateIntfImage;
  Help2 := TLazIntfImage.Create (Help1.Height, Help1.Width);
 
  FOR x := 0 TO Help1.Width-1 DO
    FOR y := 0 TO Help1.Height-1 DO
      BEGIN
        Help2.Colors[x,y] := Help1.Colors[y,x];
      end;
 
  Bmp.LoadFromIntfImage(Help2);
  Bild.Bitmap := Bmp;
  Bild.SaveToFile ('C:\Users\Frank Luerweg\Desktop\Fisheye\Test\t_90.jpg');
  Bild.Free;
  Bmp.Free;
end


Es wird kompiliert, produziert dann aber den Laufzeit-Fehler "No widgetset object". Beim Googlen habe ich dazu nichts gefunden; könnt ihr mir sagen, was ich falsch mache? Vielen Dank!
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

Beitragvon Socke » 12. Feb 2016, 13:18 Re: JPG-Bild um 90 Grad drehen

Nimm die Unit Interfaces mit auf; damit wird das eingestellte Widgetset geladen (wird von der Unit Graphics verwendet).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2538
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Fraenzken » 12. Feb 2016, 14:43 Re: JPG-Bild um 90 Grad drehen

Socke hat geschrieben:Nimm die Unit Interfaces mit auf; damit wird das eingestellte Widgetset geladen (wird von der Unit Graphics verwendet).

Danke, hat geklappt. Jetzt bekomme ich aber einen anderen Laufzeitfehler - eine "FPImageException": "failed to create handles". :(
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

Beitragvon theo » 12. Feb 2016, 18:47 Re: JPG-Bild um 90 Grad drehen

Für die Konsole würde ich das ohne LCL Abhängigkeit machen. Graphics, Interfaces etc. brauchst du nicht.
So reicht völlig:

Code: Alles auswählen
program Project1;
 
uses
  Classes,
  SysUtils,
  FPImage,
  FPWriteJPEG,
  FPReadJPEG;
 
var
  Image, Image2: TFPCustomImage;
  Writer: TFPCustomImageWriter;
  Reader: TFPCustomImageReader;
  X, Y: integer;
begin
  Image := TFPMemoryImage.Create(100, 100);
  Writer := TFPWriterJPEG.Create;
  Reader := TFPReaderJPEG.Create;
  Image.LoadFromFile('test.jpg', Reader);
  Image2 := TFPMemoryImage.Create(Image.Height, Image.Width);
  for X := 0 to Image.Width - 1 do
    for Y := 0 to Image.Height - 1 do
    begin
      Image2.Colors[Y, X] := Image.Colors[X, Y];
    end;
  Image2.SaveToFile('test1.jpg', writer);
  Image.Free;
  Image2.Free;
  Writer.Free;
  Reader.Free;
end.
theo
 
Beiträge: 8054
Registriert: 11. Sep 2006, 18:01

Beitragvon Fraenzken » 13. Feb 2016, 13:08 Re: JPG-Bild um 90 Grad drehen

theo hat geschrieben:Für die Konsole würde ich das ohne LCL Abhängigkeit machen. Graphics, Interfaces etc. brauchst du nicht.
So reicht völlig:

Code: Alles auswählen
program Project1; ...
 


Vielen Dank, Theo; funktioniert super!
Kennst du einen Trick, um die Drehung zu beschleunigen? Lassen sich z.B. ganze Zeilen auf einmal kopieren?
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

Beitragvon theo » 13. Feb 2016, 14:42 Re: JPG-Bild um 90 Grad drehen

Wenn du sie drehen musst, wie soll das gehen?
theo
 
Beiträge: 8054
Registriert: 11. Sep 2006, 18:01

Beitragvon wp_xyz » 13. Feb 2016, 15:15 Re: JPG-Bild um 90 Grad drehen

In der c't stand vor (sehr) langer Zeit einmal ein Artikel über verlustlose JPEG-Rotation, das dürfte schneller sein, und - vor allem - verhindert es den Qualitätsverlust beim erneuten Komprimieren des JPEG-Bildes. In der Graphik-Bibliothek FreeImage (http://freeimage.sourceforge.net/index.html) ist dies implementiert. Sollte unter Lazarus laufen, allerdings holst du dir dadurch die Abhängigkeit von einer externen DLL mit ins Projekt.
wp_xyz
 
Beiträge: 2611
Registriert: 8. Apr 2011, 08:01

Beitragvon Fraenzken » 16. Feb 2016, 19:41 Re: JPG-Bild um 90 Grad drehen

Danke euch beiden. Ich habe es erst einmal so gelassen, wie Theo es vorgeschlagen hat.
Fraenzken
 
Beiträge: 24
Registriert: 10. Feb 2016, 10:30

• Themenende •

Zurück zu Multimedia



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried