vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Function ImageRotate 
Autor: Dikn
Datum: 27.09.17 13:34

wie kann ich ein Bild um z.B. 5 Grad zentral drehen?
Ähnlich wie in "Picasa 3" -> Ausrichtung
Bitte ein Beispiel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function ImageRotate 
Autor: Franki
Datum: 28.09.17 01:14

Hallo,
bitte beschreibe doch mal etwas genauer was du machen möchtest, bzw. mit welcher VB Version du überhaupt arbeitest.

Bilder (oder sonst was) zu drehen per Code beinhaltet immer im Funktionsaufruf die Parameter die den Winkel und den Drehpunkt bestimmen, das kann jedes Grafikprogramm. Sei es, dass es über VBA angesprochen werden kann wie z.B. Corel.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function ImageRotate 
Autor: VB3-Guru
Datum: 08.02.18 16:03

Ich nehme an, er will das Bild im Code drehen
http://www.activevb.de/tipps/vb6tipps/tipp0223.html
Is ja nicht gerade neu
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function ImageRotate 
Autor: Franki
Datum: 09.02.18 03:17

Hallo,
und weil das eben nicht neu ist habe ich nachgefragt was genau beabsichtigt ist. Auch in deinem Beispiel müssen Mittelpunkt und Winkel der Drehung als Parameter angegeben werden. Ob per Code oder Aufruf der Parameter für einen vorhandenen Code bleibt gleich von der Funktionsweise. Welche Software das erledigt spielt dabei keine Rolle.

Aber gut, es wurde vom OP keine Antwort gegeben, vielleicht hat er es geschafft sein Problem zu lösen vielleicht auch nicht. Oder aber er hat einen ganz anderen Weg gefunden, ist ja immerhin fast ein halbes Jahr her...

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function ImageRotate 
Autor: Dikn
Datum: 19.02.18 09:31

Hallo!
Kann erst jetzt antworten (war unterwegs)
Ich möchte z.B. ein Architekturbild so drehen, daß senkrechte Bauteile auch wirklich senkrecht stehen (oder in Bildern den Horizont in Waage bringen). Dabei soll das Seitenverhältnis beibehalten werden.

Ich habe eine funktionierende Lösung…


vb2010
PictureBox [pb1] W/H: 592/333 – Zoom - PictureBox [pb2] W/H: 256/144 - Zoom - ScrollBar Max/Min: 10/-10

Hier meine Lösung Teil 1:
Imports System.Math
Imports System.Drawing.Drawing2D
 
Public Class frmEditPic
  Dim bmp_In As Drawing.Bitmap: Dim bmp_Out As Bitmap: Dim out_rect As Rectangle
  Dim relPb, relPic As Decimal: Dim decZoom As Decimal
 
  Private Sub frmEditPic_Load (...) Handles Me.Load
  bmp_In = New Bitmap(frmStart.strPicPathFull)
  pb1.Image = bmp_In: pb2.Image = bmp_In: relPb = pb1.Width/pb1.Height
  End Sub
 
  Private Sub chb_CheckedChanged (...) Handles chbRaster.CheckedChanged, _
    chbDiagonalen.CheckedChanged
  pb1.Refresh
  End Sub
 
  >>>>>> Teil2
 
End Class
funktioniert!!! Geht bestimmt einfacher/besser
Gruß Dikn
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Function ImageRotate 
Autor: Dikn
Datum: 19.02.18 09:33

Teil 2:
  Private Sub HScrollBar1_ValueChanged (...) Handles HScrollBar1.ValueChanged, _
    chbVollbild.Click
  If sender.Text = "Vollbild" Then
    If chbVollbild.Checked = True Then
      chbRaster.Enabled = False: chbDiagonalen.Enabled = False
    Else
      chbRaster.Enabled = True: chbDiagonalen.Enabled = True
    End If
  End If
  Dim rotW_half, rotH_half, rotL, rotT As Decimal
  Dim relPicIn, RelPic2 As Decimal
  Dim inW_half, inH_half As Decimal
  Dim theta As Double =  HScrollBar1.Value * 0.5 * PI / 180.0
    If theta < 0 Then theta *= -1
  Dim sin_theta As Double = Sin(theta): Dim cos_theta As Double = Cos(theta)
  tb4.Text = HScrollBar1.Value * 0.5
  inW_half = bmp_In.Width/2: inH_half = bmp_In.Height/2
  rotW_half = inW_half*cos_theta+inH_half*sin_theta: rotH_half = _
    inW_half*sin_theta+inH_half*cos_theta
  rotL = rotW_half-inW_half*cos_theta+inH_half*sin_theta: rotT = rotH_half-( _
  -inW_half*sin_theta+inH_half*cos_theta)
  bmp_Out = New Bitmap(CInt(2*rotW_half), CInt(2*rotH_half))
  Dim g As Drawing.Graphics = Graphics.FromImage(bmp_Out)
    g.Clear(Color.LightGray)
    Dim p_center As PointF
    p_center.X = rotW_half
    p_center.Y = rotH_half
    Dim m As New Drawing.Drawing2D.Matrix
      m.RotateAt( HScrollBar1.Value*0.5, p_center)
      g.Transform = m
      Dim source_rect As New Rectangle(0, 0, bmp_In.Width, bmp_In.Height)
      Dim intX As Integer = CInt((bmp_Out.Width-bmp_In.Width)/2)
      Dim intY As Integer = CInt((bmp_Out.Height-bmp_In.Height)/2)
      Dim dest_rect As New Rectangle(intX,intY,bmp_In.Width,bmp_In.Height)
      g.DrawImage(bmp_In, dest_rect, source_rect, GraphicsUnit.Pixel)
    m.Dispose()
  g.Dispose()
  pb1.Image = bmp_Out
  RelPic2 = rotT/(2*rotW_half-rotL)
  relPicIn = bmp_In.Height/bmp_In.Width
  If relPicIn < 1 Then
    If relPicIn = pb1.Height/pb1.Width Then
      out_rect.Width = Math.Floor(2*(rotH_half-rotT+rotW_half*RelPic2)/( _
        relPicIn+RelPic2)/16)*16
      decZoom = bmp_Out.Height/pb1.Height
    Else
      out_rect.Width = 2*(rotH_half-rotT+rotW_half*RelPic2)/(relPicIn+RelPic2)
      decZoom = bmp_Out.Width/pb1.Width
    End If
    out_rect.Height = out_rect.Width*relPicIn
  Else
    out_rect.Height = 2*(rotW_half-rotL+rotH_half*RelPic2)/( _
      bmp_In.Width/bmp_In.Height+RelPic2)
    out_rect.Width = out_rect.Height/relPicIn
    decZoom = bmp_Out.Height/pb1.Height
  End If
  out_rect.X = rotW_half-out_rect.Width/2
  out_rect.y =  rotH_half-out_rect.Height/2
  Dim ImagePart As Bitmap = New Bitmap(out_rect.Width, out_rect.Height)
  g = Graphics.FromImage(ImagePart)
  Dim TargetRect As Rectangle = New Rectangle(0, 0, out_rect.Width, _
    out_rect.Height)
  g.DrawImage(bmp_Out, TargetRect, out_rect, GraphicsUnit.Pixel)
  g.Dispose
  pb2.Image = ImagePart
  If chbVollbild.Checked = True Then pb1.Image = ImagePart
  End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

VB.net-Code 
Autor: VB3-Guru
Datum: 19.02.18 10:41

Soweit ich sehe, ist das VB.Net Code. Der gehört eigentlich in das entsprechende Forum

Beste Grüße,
vb3-Guru
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel