![]() |
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 |
AW: BITBLT cross platform variante für FMX / LINUX
Gibt es nicht Wine für Linux?
Und sollte open source sein. ![]() gruss |
AW: BITBLT cross platform variante für FMX / LINUX
Delphi-Quellcode:
abgeleitet vom TBitmap sollte in etwa das gleiche machen.
CopyFromBitmap
|
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
CopyFromBitmap basiert auf direct2d Linux unterstützt aber kein direct2d es sei denn man verwendet ![]() 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 |
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 |
AW: BITBLT cross platform variante für FMX / LINUX
CopyFromBitmap
![]()
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:
Zitat:
Und nochmal ![]() ![]() gruss |
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 ? |
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
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. ![]() Zitat:
gruss |
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
|
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
![]() 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. |
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. |
AW: BITBLT cross platform variante für FMX / LINUX
Danke für Aufklärung :thumb:, dann sollte mein Tipp ja doch funktionieren.
|
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
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 |
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). |
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
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 |
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. |
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 |
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. |
AW: BITBLT cross platform variante für FMX / LINUX
*entfernt war falsch*
|
AW: BITBLT cross platform variante für FMX / LINUX
Warum nicht gleich überall die Version nehmen, die überall funktioniert?
|
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
So wie ich das verstehe will er folgendes verwirklichen.
Delphi-Quellcode:
Das Problem ist nun für UNIX den vergleich zu finden.
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; Wie er sich das DC und die anderen Parameter im weiteren verlauf holt mag mal dahingestellt sein. Zitat:
Da sehe ich nichts falsches dran. gruss |
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 ;) |
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
Auf welchem Wege er das macht ist doch egal solange die Parameterliste stimmt. gruss |
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? |
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
Zitat:
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 |
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; |
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) |
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.
|
AW: BITBLT cross platform variante für FMX / LINUX
Zitat:
: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