Discussion:
BGI
(zu alt für eine Antwort)
Hans-Peter Diettrich
2015-12-16 01:54:12 UTC
Permalink
Ein BOM sucht immer noch nach einem Ersatz für BGI, lauffähig unter 32
und 64 Bit Windows. Wichtig ist schrittweises Debuggen der Ausgaben, was
eine Client-Server Architektur notwendig macht.

Nun habe ich mir OpenBGI angeschaut, bekomme es aber mit Rad Studio
nicht zum Laufen, MinGW scheitert mit verschiedenen obskuren
Fehlermeldungen (Identifier too loong...). Mit C/C++ habe ich seit 20
Jahren nichts mehr entwickelt :-(

Kann mir jemand verraten, wie sich aus diesen Quelltexten eine DLL oder
sonstwas erzeugen läßt, das dann auch von Delphi benutzt werden kann?

DoDi
Hans-Peter Diettrich
2016-01-01 11:34:05 UTC
Permalink
Inzwischen ist es mir gelungen, eine Client/Server Version von BGI für
Delphi Programme zu erzeugen, mit der sich der Aufbau der Grafik auch
schrittweise debuggen läßt :-)

GetImage() ist noch etwas langsam. Kann mir jemand verraten wie man
einen Ausschnitt einer Grafik (Bitmap in TImage) im Speicher ablegen und
wieder in die Grafik einfügen kann, statt alles pixelweise zu kopieren?


Hat sonst noch jemand Interesse an so einer Bibliothek?
[Voll funktionsfähige D7 Demo auf Anfrage, BGIredist.7z 57kB]

Ein gutes Neues Jahr wünscht allen
DoDi
Peter Below
2016-01-01 14:02:50 UTC
Permalink
Post by Hans-Peter Diettrich
Inzwischen ist es mir gelungen, eine Client/Server Version von BGI
für Delphi Programme zu erzeugen, mit der sich der Aufbau der Grafik
auch schrittweise debuggen läßt :-)
GetImage() ist noch etwas langsam. Kann mir jemand verraten wie man
einen Ausschnitt einer Grafik (Bitmap in TImage) im Speicher ablegen
und wieder in die Grafik einfügen kann, statt alles pixelweise zu
kopieren?
Eine neue TBitmap mit den gewünschten Dimensionen erzeugen,
bitmap.canvas.Copyrect (der orginal-Bitmap) verwenden um daraus einen
Teil in die andere Bitmap zu kopieren.
--
Peter Below
TeamB
Hans-Peter Diettrich
2016-01-02 13:18:16 UTC
Permalink
Post by Peter Below
Post by Hans-Peter Diettrich
GetImage() ist noch etwas langsam. Kann mir jemand verraten wie man
einen Ausschnitt einer Grafik (Bitmap in TImage) im Speicher ablegen
und wieder in die Grafik einfügen kann, statt alles pixelweise zu
kopieren?
Eine neue TBitmap mit den gewünschten Dimensionen erzeugen,
bitmap.canvas.Copyrect (der orginal-Bitmap) verwenden um daraus einen
Teil in die andere Bitmap zu kopieren.
Danke :-)


Hat schon jemand bemerkt, daß die GDI/TCanvas Funktion Ellipse()
anscheinend fälschlich als Pie implementiert ist, und deshalb eine Linie
vom Zentrum zum rechten Rand der Ellipse hinzufügt?


DoDi
Peter Below
2016-01-02 14:04:10 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Peter Below
Post by Hans-Peter Diettrich
GetImage() ist noch etwas langsam. Kann mir jemand verraten wie
man einen Ausschnitt einer Grafik (Bitmap in TImage) im Speicher
ablegen und wieder in die Grafik einfügen kann, statt alles
pixelweise zu kopieren?
Eine neue TBitmap mit den gewünschten Dimensionen erzeugen,
bitmap.canvas.Copyrect (der orginal-Bitmap) verwenden um daraus
einen Teil in die andere Bitmap zu kopieren.
Danke :-)
Hat schon jemand bemerkt, daß die GDI/TCanvas Funktion Ellipse()
anscheinend fälschlich als Pie implementiert ist, und deshalb eine
Linie vom Zentrum zum rechten Rand der Ellipse hinzufügt?
Das stimmt nun definitiv nicht. Sieh mal in Vcl.Graphics.Pas nach:

procedure TCanvas.Ellipse(X1, Y1, X2, Y2: Integer);
begin
Changing;
RequiredState([csHandleValid, csPenValid, csBrushValid]);
Winapi.Windows.Ellipse(FHandle, X1, Y1, X2, Y2);
Changed;
end;

Wenn Du da eine zusätzliche Linie hast hast Du sie vermutlich selbst
gezeichnet <g>.
--
Peter Below
TeamB
Hans-Peter Diettrich
2016-01-03 00:18:17 UTC
Permalink
Post by Peter Below
Post by Hans-Peter Diettrich
Hat schon jemand bemerkt, daß die GDI/TCanvas Funktion Ellipse()
anscheinend fälschlich als Pie implementiert ist, und deshalb eine
Linie vom Zentrum zum rechten Rand der Ellipse hinzufügt?
procedure TCanvas.Ellipse(X1, Y1, X2, Y2: Integer);
begin
Changing;
RequiredState([csHandleValid, csPenValid, csBrushValid]);
Winapi.Windows.Ellipse(FHandle, X1, Y1, X2, Y2);
Changed;
end;
Wenn Du da eine zusätzliche Linie hast hast Du sie vermutlich selbst
gezeichnet <g>.
Stimmt, mir kam da eine alte Datei dazwischen, die nach Copy&Paste noch
nicht vollständig angepaßt war, und die hat zwischendrin den Aufruf
umgeleitet :-(

DoDi

Lesen Sie weiter auf narkive:
Loading...