XbpBitmap drehen?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

XbpBitmap drehen?

Beitrag von Markus Walter »

Hallo,

weiß jemand, wie man eine Grafik (XbpBitmap) drehen kann (90 bzw. 180°)?
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: XbpBitmap drehen?

Beitrag von Jan »

GraRotate()?

Jan


PS: Ich sehe gerade, das die Online-Hilfe sagt, das ein Drehen von Rastergrafiken nicht möglich ist. Jedenfalls nicht offiziell.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: XbpBitmap drehen?

Beitrag von Markus Walter »

Hi Jan,

daran habe ich auch gedacht, aber da steht:
Hinweis: Bei Rastergrafiken (Bitmaps) können weder Matritzenoperationen berechnet noch können sie rotiert werden.
Mal davon ab, dass das seltsames Deutsch ist, bedeutet das wohl, dass man damit Pixelgrafiken nicht drehen kann... (Für den Satz dürfte ich auch keinen Preis für tolles Deutsch bekommen :wink: )
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XbpBitmap drehen?

Beitrag von Martin Altmann »

Moin,
früher (bei der Vorlesung Graphische Datenverarbeitung) haben wir das einfach händisch gemacht: Bitmapdaten zeilenweise gelesen und Spaltenweise (um zu drehen) bzw. rückwärts (um zu spiegeln) in einem neuen Bitmapobjekt weggeschrieben.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpBitmap drehen?

Beitrag von brandelh »

grabitblit oder so ähnlich heißt ein Befehl der das kann.
Ich habe mal ein Uhrbeispiel veröffentlicht in dem ich den nutze um die Größe anzupassen und ich meine dabei könnte man auch drehen.
Jimmy hat auch was dazu geschrieben.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpBitmap drehen?

Beitrag von AUGE_OHR »

Markus Walter hat geschrieben:weiß jemand, wie man eine Grafik (XbpBitmap) drehen kann (90 bzw. 180°)?
die "alte" Methode wäre jeder Pixel "lesen/setzten" mit

Code: Alles auswählen

DLLFUNCTION SetPixelV( hdc, x, y, crColor ) USING STDCALL FROM GDI32.DLL
DLLFUNCTION GetPixel( hdc, x, y ) USING STDCALL FROM GDI32.DLL
aber wenn ich mir Simons Xoanon FUNCTION DrawPlgBlt() ansehe finde ich das

Code: Alles auswählen

RETURN IF(DllCall("Gdi32.dll",DLL_STDCALL,"PlgBlt", nDestDC, cVertices, nSourceDC, aPos1[1]+1, aPos1[2], aSize1[1], aSize1[2], nBitMapHandle, 0, 0)==0,.F.,.T.)
was bei grösseren Bildern einen erheblichen Unterschied ausmacht.
gruss by OHR
Jimmy
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: XbpBitmap drehen?

Beitrag von Markus Walter »

brandelh hat geschrieben:grabitblit oder so ähnlich heißt ein Befehl der das kann.
Ich habe mal ein Uhrbeispiel veröffentlicht in dem ich den nutze um die Größe anzupassen und ich meine dabei könnte man auch drehen.
Jimmy hat auch was dazu geschrieben.
Hallo Hubert,

GraBitBlt ist ja mein Problem. Das verträgt sich ganz offensichtlich nicht mit unterschiedlicher Koordinaten-System-Ausrichtungen von Quelle und Ziel. Ich nutze das beim Ownerdrawing und die Quelle ist BottomLeft und das Ziel TopLeft. Und dann kommt es zu Dreh-/Spiegeleffekten. Drehen und Spiegeln kann GraBitBlt aber wohl nicht (zumindest erschließt sich das mir nicht aus der Doku).
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: XbpBitmap drehen?

Beitrag von Markus Walter »

AUGE_OHR hat geschrieben:

Code: Alles auswählen

RETURN IF(DllCall("Gdi32.dll",DLL_STDCALL,"PlgBlt", nDestDC, cVertices, nSourceDC, aPos1[1]+1, aPos1[2], aSize1[1], aSize1[2], nBitMapHandle, 0, 0)==0,.F.,.T.)
was bei grösseren Bildern einen erheblichen Unterschied ausmacht.
Hm, um das zu nutzen, müsste ich an den DC eines MicroPS kommen?! Und da liefert :device() NIL...

Aber ich habe zwischenzeitlich eine Lösung ausserhalb von Xbase gefunden.
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: XbpBitmap drehen?

Beitrag von Markus Walter »

Martin Altmann hat geschrieben:früher (bei der Vorlesung Graphische Datenverarbeitung) haben wir das einfach händisch gemacht: Bitmapdaten zeilenweise gelesen und Spaltenweise (um zu drehen) bzw. rückwärts (um zu spiegeln) in einem neuen Bitmapobjekt weggeschrieben.
Hi Martin,
schon klar, aber für meine Zwecke viel zu langsam...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpBitmap drehen?

Beitrag von brandelh »

Hi,

da habe ich mich wohl geirrt, im Internet gibt es hier eine Anleitung, allerdings in C++

http://www.codeguru.com/cpp/g-m/gdi/art ... tPixel.htm
oder das hier
http://www.codeguru.com/cpp/g-m/bitmap/ ... -image.htm
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: XbpBitmap drehen?

Beitrag von AUGE_OHR »

auch nicht schlecht ...

ich "denke" aber das die Method von Simon die "richtige" für ein Bitmap wäre http://msdn.microsoft.com/en-us/library ... 85%29.aspx
unter Bitmap Functions ist die API PlgBlt http://msdn.microsoft.com/en-us/library ... 85%29.aspx aufgeführt
Markus Walter hat geschrieben:Hm, um das zu nutzen, müsste ich an den DC eines MicroPS kommen?! Und da liefert :device() NIL...
MicroPS ist ja Xbase++ "spezifisch". von einen "normalen" Presspace bekommst du den hDC mit o:lockPS()
Markus Walter hat geschrieben:Aber ich habe zwischenzeitlich eine Lösung ausserhalb von Xbase gefunden.
ok das geht natürlich auch ...
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: XbpBitmap drehen?

Beitrag von brandelh »

Im PowerBasic Forum habe ich code zu PlgBlt gefunden, mit dem sowas gehen soll.
Ich bin allerdings noch nicht dazu gekommen. Nach der M$ Beschreibung die Jimmy
verlinkt hat, kann ich in den Parametern aber nicht erkennen wie die Drehung funktionieren soll ...

Was hast du jetzt für eine Lösung, gibt es eine Tool das dies "ferngesteuert" erledigen kann ?
Gruß
Hubert
Benutzeravatar
Markus Walter
Programmier-Gott
Programmier-Gott
Beiträge: 1018
Registriert: Di, 24. Jan 2006 10:22
Wohnort: Saarland

Re: XbpBitmap drehen?

Beitrag von Markus Walter »

Hallo Hubert,

die Bitmap kam sowieso aus einer Fremd-DLL und dort haben wir sie jetzt auch gedreht...
Gruß
Markus

Mitglied der XUG Saarland-Pfalz
Antworten