Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   BITBLT cross platform variante für FMX / LINUX (https://www.delphipraxis.net/198362-bitblt-cross-platform-variante-fuer-fmx-linux.html)

bernhard_LA 27. Okt 2018 13:28


BITBLT cross platform variante für FMX / LINUX
 
Hallo,


kann jemand eine unter FMX / LINUX verfügbare Variante von

Delphi-Quellcode:


///  WINDOWS GDI32 
function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC;
  XSrc, YSrc: Integer; Rop: DWORD): BOOL; stdcall;




///  FMX LINIX Variante ????
function BitBlt(DestDC: THandle; X, Y, Width, Height: Integer; SrcDC: THandle;
  XSrc, YSrc: Integer; Rop: DWORD): Boolean;
begin
    ///  hier fehlt der code :-)

end
;



anbieten. Ich will Code der unter VCL / Windows läuft dann nur durch einen Austausch der eingebunden Units auch unter LINUX weiterverwenden.
Vielleicht muss ich das Rad nicht neu erfinden

EWeiss 27. Okt 2018 13:51

AW: BITBLT cross platform variante für FMX / LINUX
 
Gibt es nicht Wine für Linux?
Und sollte open source sein.

Schau doch mal wie die das Handhaben.

gruss

KodeZwerg 27. Okt 2018 13:51

AW: BITBLT cross platform variante für FMX / LINUX
 
Delphi-Quellcode:
CopyFromBitmap
abgeleitet vom TBitmap sollte in etwa das gleiche machen.

EWeiss 27. Okt 2018 14:06

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Zitat von KodeZwerg (Beitrag 1416878)
Delphi-Quellcode:
CopyFromBitmap
abgeleitet vom TBitmap sollte in etwa das gleiche machen.

Keine Ahnung wo du deine Informationen immer herholst.

CopyFromBitmap basiert auf direct2d Linux unterstützt aber kein direct2d es sei denn man verwendet Wine (Wrapper für Windows)
Ich glaube ab vers. 1.8 wird direct2d unterstützt.

Wenn schon dann würde ich etwas aus GetDIBits und Konsorte zusammen schustern. (Bin mir aber nicht sicher ob Linux diese API kennt)

gruss

bernhard_LA 27. Okt 2018 14:08

AW: BITBLT cross platform variante für FMX / LINUX
 
unter Windows übergebe ich das Handle auf eine Canvas unter FMX hat die Bitmap zwar ein HAndle aber die Canvas nicht .....


Delphi-Quellcode:
unit windows_linunx;





function BitBlt(DestDC: THandle; X, Y, Width, Height: Integer; SrcDC: THandle;
  XSrc, YSrc: Integer; Rop: DWORD): Boolean;
begin
    /// hier fehlt der code :-)

    CopyFromBitmap ( ...)   /// wäre schon OK - wenn verfügbar  ???? 

end;

ich will eine Code variante für beide Platformen, und möglicst die exisierende Variante VCL unverändert .... weil die funktioniert momentan

EWeiss 27. Okt 2018 14:10

AW: BITBLT cross platform variante für FMX / LINUX
 
CopyFromBitmap basiert auf direct2d ist also nicht verfügbar.

Delphi-Quellcode:
FMX.Graphics.TBitmap.CopyFromBitmap


ist die FMX variante die denke ich mal ebenfalls auf direct2d aufbaut.
Ist aber unter Linux so nicht anwendbar.

Zitat:

und möglicst die exisierende Variante VCL unverändert .... weil die funktioniert momentan
Dann nimm sie doch wenn es geht.
Zitat:

unter Windows übergebe ich das Handle auf eine Canvas unter FMX
was denn nu FMX und\oder Linux.

Und nochmal
Bitblt unter Linux..

Hier noch ein anderer link!

gruss

bernhard_LA 27. Okt 2018 14:43

AW: BITBLT cross platform variante für FMX / LINUX
 
ich hätte primär gerne eine 100 % FMX // UNIX Veriante von meinem code - ohne die Verwendung von weiteren Tools auf der Unix Seite

wenn WinE, dann würde ich gerne nur diese c++ Datei verwenden und
wie binde ich die Wine Blibliothek in meine Delphi Anwendung ein ?
Gibt es hier eine Demo Code Varianate ?

EWeiss 27. Okt 2018 15:01

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Zitat von bernhard_LA (Beitrag 1416889)
wie binde ich die Wine Blibliothek in meine Delphi Anwendung ein ?
Gibt es hier eine Demo Code Varianate ?

sorry das kann ich dir auch nicht sagen..

Ich denke aber wenn Wine unter Linux installiert ist und deine Anwendung mit .exe endet erkennt der Wrapper selbst ob es eine Windows Anwendung ist oder nicht.
In dem fall kannst du ganz normal BitBlt verwenden und Wine macht den Rest.
Es ist keine Bibliothek sondern ein Wrapper der Windows Anwendungen in UNIX fähigen Format umlegt.

In meinem anderen link. http://www.gtk.org/ framework welches von GIMP verwendet wird (Windows\Linux) gibt es diese Möglichkeiten.

Zitat:

BitBlt: depends what you're blitting to. Look at the Gdk Pixbuf functions.
SelectObject: no equivalent you don't need to select stuff into a DC to use it on Linux
CreateCompatible*: gdk_pixbuf_new_from_data
GetPixel/SetPixel: Again look at GDK but you don't really want to use this stuff, for image manipulation check out Cairo (still under heavy development)
Aber auch hier keine Ahnung ob man das unter Delphi mit einbinden kann.

gruss

bernhard_LA 28. Okt 2018 06:35

AW: BITBLT cross platform variante für FMX / LINUX
 
wenn ich wine verwende , da benötige ich auch keinen DELPHI UNIX compiler -> mein Ziel Cross Platform mit Delphi

KodeZwerg 28. Okt 2018 07:01

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Zitat von EWeiss (Beitrag 1416882)
Zitat:

Zitat von KodeZwerg (Beitrag 1416878)
Delphi-Quellcode:
CopyFromBitmap
abgeleitet vom TBitmap sollte in etwa das gleiche machen.

Keine Ahnung wo du deine Informationen immer herholst.

CopyFromBitmap basiert auf direct2d Linux unterstützt aber kein direct2d es sei denn man verwendet Wine (Wrapper für Windows)

Hier habe ich die Information her und da steht nichts vonwegen limitiert auf Direct2D....
Wenn es so ist, tuts mir leid.


/edit
@bernhard_LA: Zeige doch mal bitte in form von Code was Du mit dem BitBlt() aufruf machen möchtest unter non-Windows.

mkinzler 28. Okt 2018 07:15

AW: BITBLT cross platform variante für FMX / LINUX
 
FMX verwendet auf der Windowsplattform direct2D, auf macOS aber OpenGL, auf iOS und Android OpenGL ES.
FmxLinux verwendet vermutlich auch OpenGL.

Die Implementierung von FMX.Graphics.TBitmap.CopyFromBitmap verwendet nicht grundsätzlich Direct2D, sondern nur unter Windows.
Es sollte auch auf Linux funktionieren.

KodeZwerg 28. Okt 2018 07:22

AW: BITBLT cross platform variante für FMX / LINUX
 
Danke für Aufklärung :thumb:, dann sollte mein Tipp ja doch funktionieren.

EWeiss 28. Okt 2018 08:14

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

FmxLinux verwendet vermutlich auch OpenGL.
Vermutungen wären mir zu vage wenn mein Ziel "Cross Plattform mit Delphi" wäre ;)
Könnte jetzt genauso sagen es verwendet Cuda unter Linux ob es stimmt mag dahin gestellt ein.

Aber kein Problem für mich, selbst tue ich mir so etwas nicht an. (Muss ja auch kein Kohle mit Delphi verdienen) :)

gruss

mkinzler 28. Okt 2018 08:33

AW: BITBLT cross platform variante für FMX / LINUX
 
Ich habe es nicht getestet, aber ich glaube nicht das KSDev ein eigene Renderengine für Linux geschrieben hat, wenn eine für andere Plattformen vorhandene, die von Linux unterstützte ist.
FMXLinux kopiert den Source-Code von FMX und patcht ihn währrend der Installation für die Verwendung für Linux.

BTW. er ist ja auch der ursprüngliche Author von FMX (damals nur OpenGL; VGSCene).

EWeiss 28. Okt 2018 09:10

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Ich habe es nicht getestet
Es geht mir nicht darum Recht zu haben. ;)

Letztendlich muss Bernhard es selbst versuchen wenn KodeZwerg Variante funktioniert.. Fein :)
btw.. aber nur auf Vermutungen zu schließen wäre mir persönlich wie schon gesagt zu vage denn auch versuche kosten letztendlich Zeit.
Ich für mich muss wissen ob es funktioniert oder nicht bevor ich mich an etwas heranwage was schlussendlich zum Misserfolg führt.

Zeit ist Geld! :P

gruss

TiGü 28. Okt 2018 12:37

AW: BITBLT cross platform variante für FMX / LINUX
 
@bernard_LA:
Du musst dich von dem Gedanken verabschieden, euren bisherigen Code 1:1 portieren zu können, wenn er so stark auf Windows-GDI Funktionen basiert.
Es wäre am Besten, bei der Abstraktion zu bleiben, die dir das FMX-TBitmap liefert.
Für direkte Pixel-Manipulation steht dir die Map-Funktion zur Verfügung.
Die Doku ist da eigentlich aussagekräftig genug und mit einen Blick in die jeweiligen Sourcen weiß man auch schnell woran man ist.

bernhard_LA 1. Nov 2018 22:36

AW: BITBLT cross platform variante für FMX / LINUX
 
@KodeZwerg

ich will unter UNIX / LINUX genau dieselbe Funktionalität haben wie sie mir bitblt unter Windows bietet.

Wichtig : ich möchte in den Aufrufparametern mit nicht von der Windows Bitblt Funktion unterscheiden , sondern nur anstelle der Windows unit meine unit mit einer cross platform bitblt Funktion einbinden

TiGü 2. Nov 2018 10:04

AW: BITBLT cross platform variante für FMX / LINUX
 
So wird das nichts.
Du musst eine High Level Lösung finden, die dir solche Details wie Aufrufparameter wegkapselt, wenn du nur ein Bitmap auf einen Canvas/anderes Bitmap malen willst.

KodeZwerg 2. Nov 2018 10:20

AW: BITBLT cross platform variante für FMX / LINUX
 
*entfernt war falsch*

mkinzler 2. Nov 2018 10:22

AW: BITBLT cross platform variante für FMX / LINUX
 
Warum nicht gleich überall die Version nehmen, die überall funktioniert?

EWeiss 2. Nov 2018 10:30

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Zitat von TiGü (Beitrag 1417305)
So wird das nichts.
Du musst eine High Level Lösung finden, die dir solche Details wie Aufrufparameter wegkapselt, wenn du nur ein Bitmap auf einen Canvas/anderes Bitmap malen willst.

Dito!
So wie ich das verstehe will er folgendes verwirklichen.

Delphi-Quellcode:
function BitBltWrapper(DC: HDC; x, y, cx, cy: Integer; srcDC: HDC; x1, x2: Integer; rop: DWORD): BOOL;
var
  IsWindows, IsUnix: BOOL // muss außen definiert werden nur ein Beispiel
begin

  Result := false;

  if IsWindows then
    Result := BitBlt(DC, x, y, cx, cy, srcDC, x1, x2, rop)
  else
  if IsUnix then
    Result := MyUnixBitBlt(DC, x, y, cx, cy, srcDC, x1, x2, rop);
end;
Das Problem ist nun für UNIX den vergleich zu finden.
Wie er sich das DC und die anderen Parameter im weiteren verlauf holt mag mal dahingestellt sein.

Zitat:

Warum nicht gleich überall die Version nehmen, die überall funktioniert?
Will er ja nur er möchte das Format (den Aufruf von BitBlt) erhalten!
Da sehe ich nichts falsches dran.

gruss

hoika 2. Nov 2018 10:48

AW: BITBLT cross platform variante für FMX / LINUX
 
Hallo,
wozu den Wrapper?

Ich würde eine eigene Unit mit einer Linux-BitBlt-Funktion (IFDEF LINUX) schreiben, die die gleichen Parameter wie die Windows-Funktion benutzt
und diese Unit ebenfalls statt der unit Windows per IFDEF LINUX einbinden.

Was die Funktion dann intern macht -> da bin ich raus ;)

EWeiss 2. Nov 2018 10:49

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Zitat von hoika (Beitrag 1417312)
Hallo,
wozu den Wrapper?

Ich würde eine eigene Unit mit einer Linux-BitBlt-Funktion (IFDEF LINUX) schreiben, die die gleichen Parameter wie die Windows-Funktion benutzt
und diese Unit ebenfalls statt der unit Windows per IFDEF LINUX einbinden.

Was die Funktion dann intern macht -> da bin ich raus ;)

Ist doch nur ein Beispiel dessen was er erreichen will.
Auf welchem Wege er das macht ist doch egal solange die Parameterliste stimmt.

gruss

TiGü 2. Nov 2018 12:31

AW: BITBLT cross platform variante für FMX / LINUX
 
Nein, das ist alles Käse.
Er hat einen FMX Canvas und Bitmaps. Diese bitten die passenden Methoden an. Er muss ein paar Ebenen höher ansetzen und dort den Code mit der Windows VCL Version auf einen Nenner bringen.
Die BitBlt Funktion gehört zum Windows GDI.
Woher bitteschön sollen Quell- und Ziel- HDC herkommen?

EWeiss 2. Nov 2018 13:15

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Woher bitteschön sollen Quell- und Ziel- HDC herkommen?
Keine Ahnung habe kein FMX und werde es auch nicht verwenden.
Zitat:

Nein, das ist alles Käse.
Kann sein.. es widerspricht aber seinen wünschen darauf wurde von mir geantwortet, was er am ende tut kann mir egal sein.
Er wird sich schon was dabei gedacht haben und was Käse ist entscheidet er letztendlich für sich allein.

Ich kann nicht weiterhelfen daher bin ich jetzt raus.

gruss

bernhard_LA 2. Nov 2018 14:37

AW: BITBLT cross platform variante für FMX / LINUX
 
welcher code/funtion geht überall ?


möglich wäre

Delphi-Quellcode:
function bitblt_crossplattform ( bmp1 , bmp2 : TBitmap) ;
begin
   {$ifdef windows}  //  hier VCL + Windows GDI
       bitblt (bmp1.canvas.handle, .......);
   {$endif}
   {$ifdef Linux} // oder Firemonkey
       welche_Funktion_auch_immer (bmp1, .......);
   {$endif} 
end;

KodeZwerg 2. Nov 2018 14:49

AW: BITBLT cross platform variante für FMX / LINUX
 
Mein Ursprünglicher Gedanke war es, der CopyFrom() nochn overload zu verpassen.
So bräuchtest Du nur im Code per Aufruf Windows <> Linux entscheiden womit du es fütterst.
Also zweiten overload mit BitBlt() definitionen und intern dann bitblt() aufrufen.

Wäre das doof? (hab weil ich mir selbst nicht im klaren war vorhin beitrag entfernt)

mkinzler 2. Nov 2018 14:59

AW: BITBLT cross platform variante für FMX / LINUX
 
Er muss sich ja nicht entscheiden, immer die CopyFrom-Variante verwenden. Diese funktioniert ja auch unter Windows.

KodeZwerg 2. Nov 2018 15:17

AW: BITBLT cross platform variante für FMX / LINUX
 
Zitat:

Zitat von mkinzler (Beitrag 1417352)
Er muss sich ja nicht entscheiden, immer die CopyFrom-Variante verwenden. Diese funktioniert ja auch unter Windows.

:thumb::thumb::thumb:

:wall: ich lach immer noch über mich selber :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz