Grafik drehen [Erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14905
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 36 Mal
Danksagung erhalten: 126 Mal
Kontaktdaten:

Grafik drehen [Erledigt]

Beitrag von Jan »

Moin,

gibt es irgend eine Möglichkeit, mit Xbase++- oder Windows-Bordmitteln eine bestehende jpg zu drehen? Ich brauch da nichts exotisches, einfach nur 90° (oder 270°, je nachdem wie man die Drehrichtung sieht).

Jan
Zuletzt geändert von Jan am Mi, 09. Apr 2025 7:02, insgesamt 1-mal geändert.
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 705
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 118 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von nightcrawler »

nicht direkt in Xbase++, aber evl. kann eine DLL mit https://de.wikipedia.org/wiki/Libjpeg erstellt/eingebunden werden.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Tom »

Hallo, Jan.

Das geht mit Bordmitteln m.E. nicht, jedenfalls nicht ohne Einbindung einer ActiveX-Komponente (auf diesem Weg machen wir das). Es gibt eine GDI-Funktion "RotateBitmap", die das kann, aber die erfordert GDI+, und das wollten sie in Xbase++ nicht mehr einbauen, weil ja die flächige Unterstützung hochmodernster HTML-Komponenten viel besser wäre, wenn es sie gäbe. ;)

Es gibt ein OpenSource-Tool, das Du über die Kommandozeile aufrufen kannst, es heißt "Magick" (https://imagemagick.org/). Der Kommandozeilenaufruf zur Rotation und Speicherung eines Bildes wäre dann dieser hier:

Code: Alles auswählen

magick "input.jpg" -rotate 90 "output.jpg"
Ich bin allerdings eher ein Feind von CLI-Lösungen, weil man nur wenig Kontrolle hat und es sich nicht gut visualisieren lässt. Aber Du könntest eine Schaltfläche unterhalb der Bilddarstellung mit sowas belegen (Runshell) und dann einfach das Ergebnis laden.
Herzlich,
Tom
Benutzeravatar
azzo
1000 working lines a day
1000 working lines a day
Beiträge: 867
Registriert: So, 28. Mär 2010 19:21
Hat sich bedankt: 14 Mal
Danksagung erhalten: 21 Mal

Re: Grafik drehen

Beitrag von azzo »

Man könnte FreeImage in Xbase++ einbinden – z. B. über eine DLL mit einer einfachen Schnittstelle.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Tom »

Oder IrfanView, ja. Es gibt da Dutzende Möglichkeiten. Aber kein Bordmittel.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Tom »

Ach so, und das oben verlinkte - kostenlose - Magick hat auch eine API.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14905
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 36 Mal
Danksagung erhalten: 126 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Jan »

Tom hat geschrieben: Di, 08. Apr 2025 10:36aber die erfordert GDI+, und das wollten sie in Xbase++ nicht mehr einbauen
Hallo Tom,

ähm, hatte Alaska das nicht vor zwei oder drei Jahren mal eingebaut? Fand ich damals total überraschend. Die wollten damit die Gra...-Funktionen beschleunigen. Oder verwechsle ich das mit irgend was?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14905
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 36 Mal
Danksagung erhalten: 126 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Jan »

Moin,

Danke für die vielen Vorschläge. IrfanView benutze ich selber ständig. Magick hatte ich auch gefunden als ich nach einer passenden Funktion gesucht hatte. Aber ich wollte das halt wenn irgend möglich ohne eine extra auszuliefernde Bibliothek machen. Die Funktion wird nur an einer einzigen eher unwichtigen Stelle genutzt. Und dafür will ich nicht extra hunderte Kunden mit einer zusätzlichen Datei belasten.

Und jetzt bitte keine Diskussionen um dieses Thema. Ich bin halt Fan davon möglichst wenig 3rd-party-Dateien mitzuliefern. Manchmal geht es nicht anders. Aber wenn es geht will ich das gerne machen, selbst wenn das vielleicht aufwändiger ist als eine externe Bibliothek. Von daher sind die Vorschläge von Euch oben natürlich willkommen - für den Fall das es wirklich nicht anders geht. Aber ich brauche hier jetzt keine missionarischen Versuche mich zu einer freudigen Nutzung solcher Module zu bewegen. Und wenn die noch so klein, kostenlos, einfach zu nutzen sind.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Tom »

ähm, hatte Alaska das nicht vor zwei oder drei Jahren mal eingebaut?
Nicht dass ich wüsste. Das Antialiasing bei GRA-Funktionen wäre dramatisch besser und es stünden viele zusätzliche Funktionen zur Verfügung. Aber als ich den (zu irgendeinem Treffen zugeschalteten) Steffen genau deshalb nach GDI+ gefragt habe, antwortete er sinngemäß: Warum eine veraltete Technologie implementieren/unterstützen, wenn mit HTML-Controls usw. eine ganz neue, weit bessere Welt zur Verfügung stehen wird? Im Ergebnis haben wir beides nicht bzw. eines davon höchstens teilweise.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16751
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 145 Mal
Danksagung erhalten: 64 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Martin Altmann »

Wir hatten damals im Informatikstudium im Rahmen der grafischen Datenverarbeitung mit Turbo Pascal eine Bildmanipulation programmiert (verrauschen/entrauschen/vergrößern/verkleinern/rotieren/spiegeln/diverse Filter anwenden). War nicht so aufwändig - viele mathematische Formeln.
Im Falle der Rotation recht einfach.
Das Bild liegt ja in Pixeln vor. Je nach Rotation wird ein Pixel halt an anderer Stelle abgelegt. Du hast also die Originaldatei und liest die Pixelinfos in ein zweidimensionales Array ein. Das Zielarray hat die selbe Größe, aber vertauschte Dimensionen. Du schreibst die erste Zeile der Quelle in die erste Spalte des Ziels (oder in die letzte, je nachdem wie herum du drehst. Dabei darauf achten, dass je nach Drehung die erste Spalte der Quelle in die letzte (oder erste) Zeile des Ziels muss). Einfach ineinander verschachtelte Schleifen.
Danach das Zielarray wieder als Bild rausschreiben. Fertig.

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
nightcrawler
1000 working lines a day
1000 working lines a day
Beiträge: 705
Registriert: Di, 24. Apr 2012 16:33
Wohnort: 72184 Weitingen
Hat sich bedankt: 4 Mal
Danksagung erhalten: 118 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von nightcrawler »

nicht bei jpg...da musst Du zuerst jpg-> Bitmap, dann rotieren, dann wieder zurück Bitmap->jpg. Damit automatisch Kompression, ggf Artefakte.
--
Joachim
Joachim Dürr Softwareengineering
https://www.jd-engineering.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Tom »

Ach, Martin hat damals sicher auch ein paar Algorithmen zur Bilddekompression eingeatmet, die er hier mit uns teilen kann. Dann hat man ja wieder eine Bitmap. 8) Aber schon ein lustiger Vorschlag.
Herzlich,
Tom
Benutzeravatar
Marcus Herz
Programmier-Gott
Programmier-Gott
Beiträge: 1013
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 49 Mal
Danksagung erhalten: 246 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Marcus Herz »

Tom hat geschrieben: Di, 08. Apr 2025 13:50 Steffen genau deshalb nach GDI+ gefragt habe, antwortete er sinngemäß: Warum eine veraltete Technologie implementieren/unterstützen, wenn mit HTML-Controls usw. eine ganz neue, weit bessere Welt zur Verfügung stehen wird? Im Ergebnis haben wir beides nicht bzw. eines davon höchstens teilweise.
Das wäre dann wohl SKIA, aber halt 64bit. Das ist das Rendering von z.B. Chrome, etc. List&Label baut das in die nächste Version ein (nur 64bit Version). Ist rattenschnell.
Combit hat in einer Demo ein PDF mit GDI mit ca. 100 Seiten in 4-5 sec erstellt, mit SKIA waren es unter 2 sec.
Ob man das noch erlebt? 64bit? (Hi Jimmy)
Gruß Marcus

Den Kopf in den Sand zu stecken rettet die Welt auch nicht.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16751
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 145 Mal
Danksagung erhalten: 64 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Martin Altmann »

Hmm - was hat man denn im PresentationSpace, wenn man eine Grafik reinlädt? Ich habe es unter Xbase++ noch nicht versucht.
Klar, früher waren das bmp-Dateien. Wir reden hier ja von Ende der 80iger :wink:

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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16751
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 145 Mal
Danksagung erhalten: 64 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Martin Altmann »

Tom hat geschrieben: Di, 08. Apr 2025 15:29 Ach, Martin hat damals sicher auch ein paar Algorithmen zur Bilddekompression eingeatmet, die er hier mit uns teilen kann. Dann hat man ja wieder eine Bitmap. 8) Aber schon ein lustiger Vorschlag.
Nun erzähl mir nicht, dass ihr sowas früher nicht gemacht habt im Studium.

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
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16751
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 145 Mal
Danksagung erhalten: 64 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Martin Altmann »

Noch einfacher geht es ja mit HTML und CSS - wenn du das bei deinem Control nutzen kannst, schau dir mal die CSS-Eigenschaft transform an.
:arrow: https://www.dynamsoft.com/codepool/how- ... cript.html

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
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Tom »

Nun erzähl mir nicht, dass ihr sowas früher nicht gemacht habt im Studium.
Klar haben wir das. Und im Prinzip hast Du ja recht. Aber ein eigener Algorithmus zur JPG-Kompression und Dekompression ist kein Klacks.
Herzlich,
Tom
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16751
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 145 Mal
Danksagung erhalten: 64 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Martin Altmann »

Glaube ich Dir - ich schrieb ja auch von Bitmaps.

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.
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2604
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 23 Mal
Danksagung erhalten: 92 Mal

Re: Grafik drehen

Beitrag von ramses »

Ich verwende dazu die FreeImage DLL ich hätte dir dazu die passenden Funktionen in Xbase++ um das mir der dll zu tun.
Valar Morghulis

Gruss Carlo
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14905
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 36 Mal
Danksagung erhalten: 126 Mal
Kontaktdaten:

Re: Grafik drehen

Beitrag von Jan »

Moin,

anscheinend liest Diego (Kerejeta) hier mit. Der hat mir per Mail Code zukommen lassen, der das mit Windows-Boardmitteln macht. Klappt super einwandfrei. Mein Dank geht an ihn dafür.

Das hier ist sein Code. Nichts umgeschrieben, nur etwas umformatiert nach meinen Gewohnheiten. Er hat mir auf Rückfrage erlaubt, das hier zu posten.

Code: Alles auswählen

FUNCTION Rotate(cFile, cNewFile, nDegrees)

LOCAL lSuccess := .T.
LOCAL bError   := NIL
LOCAL oImg     := NIL
LOCAL oIP      := NIL
LOCAL oFilters := NIL
LOCAL oPT1     := NIL
LOCAL oFilter  := NIL

bError        := ErrorBlock( {|e| BREAK(e)})

BEGIN SEQUENCE
   oImg       := CreateObject("WIA.ImageFile")
   oIP        := CreateObject("WIA.ImageProcess")
   oFilters   := oIP:Filters

   oImg:loadFile(cFile)

   oPT1       := oIP:filterInfos("RotateFlip")
   oFilters:Add(oPT1:filterID)
   oPT1:destroy()
   oFilters:destroy()

   oFilter    := oIP:filters( 1 )
   oPT1       := oFilter:properties("RotationAngle")
   oPT1:Value := nDegrees
   oPT1:destroy()
   oFilter:destroy()

   oPT1     := oIP:Apply(oImg)
   oPT1:SaveFile(cNewFile)
   oPT1:destroy()

   oImg:destroy()
   oIP:destroy()

RECOVER
   lSuccess   := .F.
   FErase(cNewFile)

   IF oImg     <> NIL
      BEGIN SEQUENCE
      oImg:destroy()
      END SEQUENCE
   ENDIF
   IF oIP      <> NIL
      BEGIN SEQUENCE
      oIP:destroy()
      END SEQUENCE
   ENDIF
   IF oFilters <> NIL
      BEGIN SEQUENCE
      oFilters:destroy()
      END SEQUENCE
   ENDIF
   IF oPT1     <> NIL
      BEGIN SEQUENCE
      oPT1:destroy()
      END SEQUENCE
   ENDIF
   IF oFilter  <> NIL
      BEGIN SEQUENCE
      oFilter:destroy()
      END SEQUENCE
   ENDIF
END SEQUENCE

ErrorBlock(bError)

RETURN lSuccess
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9877
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 138 Mal
Danksagung erhalten: 470 Mal
Kontaktdaten:

Re: Grafik drehen [Erledigt]

Beitrag von Tom »

Cool!

Das hier ist der Hintergrund. Wusste ich nicht, dass es das gibt: https://de.wikipedia.org/wiki/Windows_Image_Acquisition
Herzlich,
Tom
RolandG
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 371
Registriert: Mi, 09. Jan 2019 16:02
Wohnort: Neresheim
Hat sich bedankt: 2 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: Grafik drehen [Erledigt]

Beitrag von RolandG »

Prima!
jetzt wo Diego (Kerejeta) + Jan das mit WIA aufgezeigt hat ist es mir auch wieder eingefallen.
Habe da für meinen WebShop auch mal was mit WIA gemacht um die Bilder anzupassen.
Umwandeln: JPEG-BMP-PNG-GIF-TIFF,
Größe anpassen (Skalieren), Bildqualität (JPG) ändern, Seitenverhältnis,
Flip + Mirror mache ich anders,
und Rotate hatte ich nicht gebraucht

habe das Thema verfolgt aber auf WIA bin ich nicht mehr gekommen...
Gruß
Roland
Antworten

Zurück zu „Programmierung allgemein“