ersatz für Delphi-> Bitmap.Scanline

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
etron777
Beiträge: 5
Registriert: Di 17. Aug 2010, 17:27

ersatz für Delphi-> Bitmap.Scanline

Beitrag von etron777 »

Hallo zusammen,
gibt es einen Ersatz für Scanline bei Lazarus?

Delphi code z.B.:

Code: Alles auswählen

procedure Invertieren(Bitmap:TBitmap);
var i,j :  INTEGER;
    Row :  ^TRGBTriple;
 
begin
    for j := 0 to Bitmap.Height-1 do begin
      row := Bitmap.Scanline[j];
      for i := 0 to Bitmap.Width-1 do begin
        row^.rgbtred   := not row^.rgbtred;
        row^.rgbtBlue  := not row^.rgbtblue;
        row^.rgbtgreen := not row^.rgbtgreen;
        inc(row);
      end;
    end;
    bitmap.Assign(bitmap);
end;




Viele GRüße Knut


etron777
Beiträge: 5
Registriert: Di 17. Aug 2010, 17:27

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von etron777 »

Danke, das ist das was ich suche.


aber neue Frage:
Wo finde ich denn das LCL??? Package dass beim Compilieren nicht gefunden wird.

viele Grüße Knut

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von theo »

etron777 hat geschrieben:Wo finde ich denn das LCL??? Package dass beim Compilieren nicht gefunden wird.


Machst du ein Kommandozeilen Programm?
Dann solltest du mit FPImage arbeiten.

etron777
Beiträge: 5
Registriert: Di 17. Aug 2010, 17:27

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von etron777 »

Nein Windows Grafikprogramm.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von theo »

Dann verstehe ich deine Frage nicht.

etron777
Beiträge: 5
Registriert: Di 17. Aug 2010, 17:27

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von etron777 »

Oder ich was anderes nicht ...

ich habe mir das heruntergeladen:
http://wiki.lazarus.freepascal.org/LazRGBGraphics
wenn ich versuche das Beispielprogramm zu compilieren kommt eben die nachfrage nach den Units.

Grüße Knut

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von theo »

LazRGBGraphics brauchst du nicht.

etron777
Beiträge: 5
Registriert: Di 17. Aug 2010, 17:27

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von etron777 »

Aber der Screenshot ist genau das was ich eigentlich brauche, bzw die Basis dazu.
Ich brauche Grafikdatei öffnen, und automatisch bearbeitet (nach fixen Vorgaben) auf dem Bildschirm ausgeben und die Möglichkeit dies wieder abzuspeichern abspeichern.

Nur lässt sich das Beispielprogramm dazu eben nicht compilieren.

Kennst Du ein besseres Tool dazu?

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von creed steiger »


Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von Hitman »

Oder vielleicht die hervorragende Vampyre Imaging Library.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von theo »

creed steiger hat geschrieben:hilft das?
viewtopic.php?p=4915#p4915


OpBitmap ist hier eigentlich schon geeignet, wenn du möglichst wie bei Delphi arbeiten möchtest.
Diese Version: http://www.theo.ch/lazarus/opbitmap64.zip
Pixelformatumwandlung und Scanline funktionieren da ziemlich gleich. Bei deinem Anliegen könnte es etwa so aussehen:

Code: Alles auswählen

uses opbitmap, opbitmapformats, lazbridge;
 
....
 
procedure Invertieren(Bitmap:TCanvasOPBitmap); //Nur Typ ändern
var i,j :  INTEGER;
    Row :  ^TRGBTriple;
begin
    for j := 0 to Bitmap.Height-1 do begin
      row := Bitmap.Scanline[j];
      for i := 0 to Bitmap.Width-1 do begin
        row^.rgbtred   := not row^.rgbtred;
        row^.rgbtBlue  := not row^.rgbtblue;
        row^.rgbtgreen := not row^.rgbtgreen;
        inc(row);
      end;
    end;
   // bitmap.Assign(bitmap); // Auskommentieren. Muss ein Hack sein bei Delphi
                              //(bitmap sich selber zuweisen??).
                              // Das funzt bei OpBitmap so nicht und ist auch überflüssig
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var opb:TOPPicture;
begin
 opb:=TOPPicture.Create;
 opb.LoadFromFile('/home/theo/test.png');
 opb.Bitmap.PixelFormat:=pf24bit;
 invertieren(opb.Bitmap);
 AssignOpBitmapToBitmap(opb.Bitmap,Image1.Picture.Bitmap);
 opb.SaveToFile('/home/theo/testop.png');
 opb.free;
end;

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von Euklid »

etron777 hat geschrieben:Wo finde ich denn das LCL??? Package dass beim Compilieren nicht gefunden wird.


Die LCL ist die Lazarus Component Library. Die wird von Lazarus automatisch verwendet, da muss man nichts installieren.

Für einzelne Komponenten kann es möglich sein, dass Packages nachinstalliert werden müssen. Welches Package brauchst Du denn?

Gruß, Euklid

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: ersatz für Delphi-> Bitmap.Scanline

Beitrag von Bora4d »

Bei lazrgbgraphics hat das Beispielprogramm Fehler. Versuch das:
1. Öffne erst aus dem Komponenten Ordner (Wo du Komponente gespeichert hast) lazrgbgraphics.lpk und kompiliere es.
Hiermit stellst du sicher, dass Lazarus die Komponente findet. Für's Testen brauchst du es nicht zu installieren.
2. Öffne aus dem Unterordner Example das Projekt rgbexample.lpi
Jetzt ändere im Editor-Fenster RGBUnit.pas (das ist Formular-Unit wo Lazarus dir meldet: rgbunit.pas(40,27) Fehler: Bezeichner "TButton" nicht gefunden ) in Uses-Abschnitt "Buttons," zu "StdCtrls,". So sieht es aus:

Code: Alles auswählen

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, //Buttons,
  RGBGraphics, ExtDlgs;


Danach funktioniert kompilieren.

Wenn du willst das Konsolen-Fenster verschwindet mußt du auch in Menu [Projekt>Projekt Enstellungen] wählen, danach in [Compilereinstellungen>Linken]-Einstellungen [Win32-Gui-Anwendung] ankreuzen.

Antworten