vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 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

VB.NET - Ein- und Umsteiger
Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Bazi
Datum: 12.02.15 12:34

das funktioniert aber nur wenn das Bild komplett sichtbar ist.
Wenn ich nur einen Ausschnitt sichtbar habe, und quasi drehen möchte dass die Mitte des sichtbaren Bereiches nach dem Drehen wieder in der Mitte ist, dann werde ich ums verschieben wohl nicht rumkommen.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Bazi
Datum: 12.02.15 08:46

Hallo,

wenn ich in einer Picturebox das Bild mit RotateFlip um 90° drehe, verändert sich doch mein oben links dargestellter Bildpunkt. Wie kann ich den ermitteln? Die MS-Beschreibung schweigt sich hierüber aus.
Beispielsweise, wenn ich vor der Drehung eine Bildposition oben links von 50/80 hatte,nennen wir das mal ScrollPos. Wie ermittle ich die neue nach der Drehung?

Gruß Christian

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Manfred X
Datum: 12.02.15 09:19

Hallo!

Ich vermute, die Angaben zur Bildposition (50/80) sind Distanzangaben
relativ zur linken oberen Ecke des Bildes.
Bei Drehungen mit Rotateflip versetzt Du diese Ecke.
Von der neuen Eckposition aus wird über die Distanzwerte
die neue Position des Punktes berechnet.




Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Bazi
Datum: 12.02.15 09:33

Hallo, ja das sind Distanzwerte.
Das ist der ausgeblendete oder ungenutzte Teil des Bildes.

Wenn ich das versetze, dann hieße das, die sind dann bei einer Drehung nach rechts nicht mehr in Relation zur linken ober Ecke, sondern dann zur rechten oberen Ecke.

Also müsste sich die neue Scrollposition berechnen lassen aus der alten ScrollPosition sowie den Abmessungen der Zeichnung.

Somit müsste die neue ScrollPosition nach einer Rechtsdrehung sein:
Höhe der Zeichnung - alteScrollPos.left / AlteScrollPos.top - Breite der Zeichnung ?

Oder hab ich da nen Denkfehler?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Manfred X
Datum: 12.02.15 09:50

Warum denken?
Hier ein wenig Code zum Ausprobieren.
Public Sub TestRotation()
 
    'Bitmap erstellen
    Dim bmp As New Bitmap(200, 500, Imaging.PixelFormat.Format24bppRgb)
 
    'Die Farbe des kritischen Punktes definieren
    Dim ckrit As Color = Color.FromArgb(125, 125, 125)
 
    'Den kritischen Punt farbig markieren
    bmp.SetPixel(60, 170, ckrit)
 
    'Gewünschte Dreh-/Kipp-Bewegubng ausführen
    bmp.RotateFlip(RotateFlipType.Rotate90FlipNone)
 
 
    'Suche nach der neuen Position
    For i As Integer = 0 To bmp.Width - 1
       For k As Integer = 0 To bmp.Height - 1
          If bmp.GetPixel(i, k) = ckrit Then Stop
       Next k
    Next i
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Bazi
Datum: 12.02.15 10:57

Danke,

gedreht wird immer über den Mittelpunkt? Oder gibt es da Unterschiede?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Manfred X
Datum: 12.02.15 11:10

Das kommt auf die verwendete Methode an.
Die RotateFlip-Methoden der Bitmap vertauschen
bei rechtwinkligen Bildern Höhe und Breite -
das Bild startet immer bei 0/0 - insofern liegt
hier nur bei quadratischen Bildern eine reine Drehung/Kippung
um die Bildmitte vor; sonst wird zusätzlich eine Verschiebung
an den linken/oberen Rand vorgenommen.

Bei der RotateAt-Methode der Drawing2D.Matrix kann der
Drehmitelpunkt explizit angegeben werden.

Beitrag wurde zuletzt am 12.02.15 um 11:13:00 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Bazi
Datum: 12.02.15 11:36

Gut zu wissen. Vermutlich ist aber RotateFlip schneller? Da ich mit großen Bitmaps arbeite ist das ein Thema (Pläne in DIN-A0)
Weil ich als Anwender erwarten würde dass bei einer Drehung der Bildschirmmittelpunkt der Drehpunkt ist, muss ich da also einige weitere Faktoren berechnen und das Bild nach der Drehung wieder entsprechend verschieben.
Das ist doch wesentlich komplexer als ich dachte.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Manfred X
Datum: 12.02.15 12:19

Wenn Deine Pläne nicht quadratisch sind, füge geeignete Ränder
in der Bitmap an, damit sie in der Gesamt-Abmessung quadratisch wird.
RotateFlip dreht dann um den Mittelpunkt.

DIN A0: 841mm × 1189mm --> 174 mm Breiter Rand (links und rechts).
Was diese Zahlen in Pixel bedeuten, entnimmst Du den
Resolution-Eigenschaften bzw. den Width/Height-Eigenschaften der Bitmap.

Beitrag wurde zuletzt am 12.02.15 um 12:24:12 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Manfred X
Datum: 12.02.15 20:48

Die RotateFlip-Methode der Bitmap dreht immer die gesamten Bild-Daten, die die Bitmap enthält.
In einem Control angezeigte Ausschnitte werden dabei nicht berücksichtigt.
Den korrespondierenden Ausschnitt mußt Du danach neu berechnen.

Vielleicht helfen Dir dabei diese Routinen ...

    Private Function ComputeRotatedPoint(ByVal p As Point, _
        ByVal width As Integer, ByVal height As Integer, _
        ByVal rf As RotateFlipType) As Point
 
 
        'p               Punkt in der unrotierten Bitmap
        'Width, Height   Abmessungen der unrotierten Bitmap
        'Rückgabe: Position des Punktes p in der rotierten Bitmap
 
        Dim ret As Point
        Select Case rf
            Case RotateFlipType.Rotate90FlipNone
                ret = New Point(height - p.Y - 1, p.X)
            Case RotateFlipType.Rotate180FlipNone
                ret = New Point(width - p.X - 1, height - p.Y - 1)
            Case RotateFlipType.Rotate270FlipNone
                ret = New Point(p.Y, width - p.X - 1)
            Case Else
                ret = Nothing
        End Select
 
        Return ret
    End Function
 
 
    Private Function ComputeRotatedRectangle(ByVal rect As Rectangle, _
                                             ByVal width As Integer, height As _
                                             Integer, _
                                             ByVal rf As RotateFlipType) As _
                                             Rectangle
 
        'Bestimmung eines Rectangle nach der Rotation
 
        'rect           Rechteck unrotiert
        'width, height  Abmessungen der unrotierten Bitmap
 
        'Eckpunkte Original-Rechteck
        Dim xleft As Integer = rect.X
        Dim xright As Integer = rect.X + rect.Width - 1
        Dim ytop As Integer = rect.Y
        Dim ybottom As Integer = rect.Y + rect.Height - 1
 
        'gegenüberliegende Eckpunkte des rotierten Rechtecks
        Dim topleft As Point = _
               ComputeRotatedPoint(New Point(xleft, ytop), width, height, rf)
        Dim bottomright As Point = _
               ComputeRotatedPoint(New Point(xright, ybottom), width, height, _
               rf)
 
        'Rectangle-Parameter ermitteln
        Dim ret As New Rectangle
        ret.Location = New Point(Math.Min(topleft.X, bottomright.X), _
                                 Math.Min(topleft.Y, bottomright.Y))
 
        ret.Size = New Size(Math.Abs(topleft.X - bottomright.X) + 1, _
                            Math.Abs(topleft.Y - bottomright.Y) + 1)
 
        Return ret
    End Function
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: obere linke Ecke des Bildes nach Drehung ermitteln 
Autor: Bazi
Datum: 13.02.15 20:17

Super, danke, hat mir sehr geholfen.
Da hab ich mal wieder gemerkt dass ich blutiger Anfänger bin

Danke für die Hilfe

Gruß Christian

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