vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 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 & Windows API
Alphablend-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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Alphablend-Funktion langsam bei Bild_X > Bild_Y 
Autor: ModeratorMartoeng (Moderator)
Datum: 23.02.13 12:09

Hmm, schwierig. Allerdings noch viel schwieriger ohne Beispielcode.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
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