| |
VB & Windows APIAlphablend-Funktion langsam bei Bild_X > Bild_Y | | | Autor: hydox | Datum: 23.02.13 11:56 |
| Hallo! Habe erfolgreich eine Blendfunktion mit der GdiAlphaBlend Lib "gdi32" hinbekommen. Habe mich nur gewundert, dass das darauf gezeichnete Linienmuster meistens sehr ruckelig vonstatten geht beim Verschieben der Punkte/Linien, bis ich bemerkt habe bei meiner Suche, dass es bei einem Bildseitenverhältnis von X<Y total schnell funktioniert und bei X>Y komischerweise total ruckelig? Kann einer sagen, ob sich das auf einen Fehler meinerseits bezieht oder das einfach eine Gegebenheit der Funktion ist? Dass es nur an der Blendfunktion liegt, stell ich fest, indem ich ohne Hintergrundbild (Blendfunktion auskommentiert) zeichne, da ist es in jedem Seitenverhältnis des Picture schnell. Danke für Eure Hilfe! Micha | |
Re: Alphablend-Funktion langsam bei Bild_X > Bild_Y | | | Autor: hydox | Datum: 23.02.13 12:46 |
| Danke für die schnelle Antwort. Ich hänge mal das wichtigste mit ran, wenn das so einfach geht, bin neu hier
Declaration der API:
' GdiAlphaBlend: Windows NT/2000/XP/Vista: Included in Windows 2000 and later.
Public Declare Function GdiAlphaBlend Lib "gdi32" (ByVal hdcDest As Long, _
ByVal XDest As Long, ByVal YDest As Long, ByVal WidthDest As Long, _
ByVal HeightDest As Long, ByVal hdcSrc As Long, ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal WidthSrc As Long, ByVal HeightSrc As Long, _
ByVal Blendfunc As Long) As Long
Public PicBreite As Long ' Bildbreite
Public PicHoehe As Long ' Bildhöhe
Public Bildpfad As String
Public TempBild As StdPicture
'======================================================
Beim Laden der Datei und des verwendeten Hintergrundbildes die Berechnung des _
Seitenverhältnisses, nach der dann die Picturegröße festgelegt wird:
Public Sub Bildanpassung()
If Len(Bildpfad) > 0 And X_echt > 0 And Y_echt > 0 Then
'Seitenverhältnisse feststellen:
RatioRahmen = Picture3.ScaleWidth / Picture3.ScaleHeight _
'Formseitenverhältnis Bildrahmen
RatioPic = X_echt / Y_echt 'Bildseitenverhältnis
Ratio = RatioPic / RatioRahmen 'Bild-zu-Form Verhältnis
If Ratio < 1 Then Picture1.Height = Picture3.ScaleHeight: Picture1.Width = _
Picture1.Height * RatioPic
If Ratio >= 1 Then Picture1.Width = Picture3.ScaleWidth: Picture1.Height = _
Picture1.Width / RatioPic
Picture1.Top = Picture3.Top + (Picture3.Height / 2 - Picture1.Height / 2)
Picture1.Left = Picture3.Left + (Picture3.Width / 2 - Picture1.Width / 2)
Set TempBild = LoadPicture(Bildpfad) ' Bild laden
With Picture2
PicBreite = Picture1.ScaleWidth 'Bildbreite
PicHoehe = Picture1.ScaleHeight 'Bildhöhe
.Move 0, 0, PicBreite, PicHoehe 'Größe anpassen
.PaintPicture TempBild, 0, 0, PicBreite, PicHoehe 'Positionierung und
' Größe (Stretch) Bild in Picture2
End With
Call HScroll1_Scroll
Set TempBild = LoadPicture() 'Speicher freigeben
If Picture1.Visible = False Then Picture1.Visible = True
Label21.Caption = "Kleinste Auflösung: " & Format(X_echt / Picture1.Width, _
"0.00") & " mm"
End If
End Sub
'======================================================
'Bildhelligkeitsblendfunktion direkt vor dem Linienzeichnen:
Alphawert = HScroll1.Value
With Picture1
.DrawWidth = 1
.DrawStyle = 0
.BackColor = vbWhite
Call GdiAlphaBlend(.hDC, 0, 0, PicBreite, PicHoehe, Picture2.hDC, 0, 0, _
PicBreite, PicHoehe, &H10000 * Alphawert)
'.Refresh 'nicht notwendig, so auch kein Bildflackern
End With
'====================================================== Hoffe, dass jemand die Muse hat, da was zu sehen, wär schön, danke schon mal. Micha | |
Re: Alphablend-Funktion langsam bei Bild_X > Bild_Y | | | Autor: Zardoz | Datum: 23.02.13 16:51 |
| Hallo Micha,
das sollte funktionieren. Die Rechenzeit bei AlphaBlend ist
ungefähr proportional zur Bildfläche (Brreite * Höhe). Das
Problem muss an anderer Stelle liegen.
Gruss,
Zardoz | |
Re: Alphablend-Funktion langsam bei Bild_X > Bild_Y | | | Autor: hydox | Datum: 24.02.13 08:51 |
| Hallo Zardoz!
Danke für Deine Antwort. Ich bin eben auch selbst auf eine Erkenntnis gestoßen. Aufgefallen war mir der Mist nur, weil es bei quadratischen und hohen Bildern superschnell ging und bei breiten Bildern seltsam langsam. Das aber damit auch bei festem Bildcontainerverhältnis die Bildgröße gesamt abhängt, weil die max. Höhe immer gleich ist, auf die Idee bin ich nicht gekommen - bis jetzt .
Es ist schlichtweg die Gesamtgröße, also die Pixelzahl. Ich denke, der Ansatz reicht mir zum Weiterkommen. Danke Euch und viel Spaß noch allen! Micha | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere Infos
|