Hallo Forum,
ich bin schon lange stiller Leser dieses Forums und habe schon viele nützliche Tipps ergattert.
Aber für dieses Thema scheint es irgendwie nichts zu geben.
Ich suche schon seit einiger Zeit nach einer VBA-Funktion/Code um in einem Access-Formular das Bild in einem Bildsteuerelement um 90 Grad zu drehen. Leider sind die Lösungen, die ich woanders gefunden habe, (div. Beschreibungen mit Api-Aufrufen) unvollständig beschrieben oder funktionieren schlicht nicht.
Für ein paar Codeschnipsel mit Erläuterung wäre ich sehr dankbar.
Beste Grüße
Andreas
Access bietet keine Möglichkeit zur Bildbearbeitung.
Wie du schon bemerkt hast, könnte man Windows Funktionen verwenden - man müsste also nicht selbst programmieren.
Vielleicht erklärst du mal die Hintergründe zum Projekt, damit sich mögliche Helfer ein Bild machen können.
Und ja - Beispiele gibt es jede Menge.
Die Frage ist nur ob du die Bereitschaft hast dich einzuarbeiten.
Hallo Markus,
vielen Dank für deine Antwort. In diesem Fall geht es konkret um eine Datenbank für Uhrensammlungen, die schon recht weit gediehen ist. Es werden umfangreiche Daten der einzelnen Uhren organisiert. Das geht über allgemeine Daten, Größe, Marke, etc. bis hin zu detaillierten technischen Daten der Uhrwerke. Dazu werden oft und viel Bilder verknüpft, die in den Datensätzen dann dynamisch angezeigt werden. Die Nutzer der DB verstehen oft sehr viel von Uhren, haben aber mit Bildformatierung nichts am Hut. Da möchte ich halt eine 1 Klick Lösung bieten.
Zu meinem Hintergrund: In VBA fühle ich mich schon ziemlich fit (Hab vor 30 Jahren mal mit MS Quick Basic angefangen (Neben Cobol, was eigentlich meine Profession ist) und immer mal wieder Projekte mit Basic gemacht.) Nur die Arbeit jetzt im Objektfeld jedes Pixel selbst weiter zu drehen wollte ich mir ersparen.
Anbei ein fertiges Beispiel mit GDI gelöst.
https://www.vbarchiv.net/tipps/tipp_928-bild-drehen-mit-plgblt-api-ges.html
Ist zwar wie immer für VB6.
Wenn du ein Userform Bild Steuerelement verwendest, kannst du das vermutlich 1:1 verwenden.
Die Performance soll laut Angabe gut sein. Kann ich nicht beurteilen.
Wenn die Performance nicht reicht muss man aktuelle Technologien wie Direkt2d verwenden.
Da hast du mit VBA aber schlechte Karten.
Edit: Hab grad gesehen, man braucht natürlich einen hdc.
Falls du da Hilfe brauchst, sollte auch was zu finden sein.
Hallo,
macht es Sinn, Bilder im Formular zu drehen? Wird der betreffende Datensatz erneut angewählt, ist die Drehung ja wieder weg.
Ich würde deshalb eher dazu raten, die Bild-Datei selbst zu drehen, z. B. mit IrfanView (kostenlos). Dazu könntest du IrfanView mit Kommandozeilen-Parametern mit einem Button z. B. "rechts drehen 90°" neben dem Bild aufrufen oder sogar mehrere Drehungen anbieten... IrfanView dreht jpg-Bilder übrigens verlustfrei.
Gruß,
crystal
Hallo
da du lt. Eingangspost nur um 90° drehen willst, könntest du u.U. auf die Api "WIA" zurückgreifen
LuftCode:
'verweis auf die "Windows Image Acquisition Library"
Dim WIA As WIA.ImageFile
Dim IP As ImageProcess
Set WIA = new WIA.ImageFile
Set IP = new WIA.ImageProcess
IP.Filters.Add IP.FilterInfos("RotateFlip").FilterID
IP.Filters(1).Properties("RotationAngle") = 90
WIA.LoadFile [DeinLW:\DeinPath\DeinBild] '<--Anpassen
Set WIA = IP.Apply(WIA)
Me.[DeinAccessBildControl].PictureData = WIA.FileData.BinaryData '<--Anpassen
Hallo zusammen,
vielen Dank für die Tipps. Ich muss sagen, ich habe Tomaten auf den Augen gehabt. Ich nutze Irfanview in der DB bereits als Batch-Tool um eine Slideshow zu realisieren. Das funzt auch prima. Was liegt da näher als die Bilder im Falle eines Falles mal kurz per shell.execute irfanview.... zu drehen.
Habe es gerade schon eingebaut. Top.
Also allen noch einen schönen Tag und Danke!
Update:
noch einfacher geht es mit dem kostenlosen Programm Imagick (Imagemagick.org). Sie stammt aus der Linuxwelt und hat unzählige Möglichkeiten zur Grafikbearbeitung direkt über die Kommandozeilenebene. Bild drehen im Formular ist dann nur noch ein kleiner Shellbefehl:
shellbefehl = imagickpfad & " convert " & Me.Bild & " -rotate 90 " & "zuletzt90Gradgedreht.jpg"
Shell (shellbefehl)
FileCopy "zuletzt90Gradgedreht.jpg", Me.Bild
Me.Refresh