vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

VB.NET - Fortgeschrittene
Re: Tranzparenter Verlauf ? 
Autor: Longri
Datum: 12.03.08 12:30

Hallo Christian vielen Dank

Mit Hilfe des Workshopshttp://www.vbarchiv.net/workshop/workshop97.php
Habe ich das Problem gelöst.

Ich habe mich auf einen Verlauf von Oben nach Unten beschränkt.
Durch Angabe von TopTranzparent kann ich die Anfangs Transparenz festlegen.
Angabe in Prozent
100= Undurchsichtig
0= voll Transparenz

Public Function SetImageAlphaVerlauf(ByVal Image As Bitmap, ByVal _
  TopTransparent As Int16) As Image
 
        ' Die Funktion demonstriert die direkte Bearbeitung 
        ' der Pixeldaten einer Bilddatei und
        ' schreibt das Ergebnis in die Datei 'Bilddatei_out'
 
        Dim x, y As Integer ' Loop
        Dim Byte_Index As Integer = -4 ' Index im 1D-Array
 
 
        ' Bitmap aus Datei laden
        Dim bmp_in As New Drawing.Bitmap(Image)
 
        ' Rectangle für die Größe des gesamten 
        ' geladenen Bildes erstellen 
        Dim bmp_rect As New Drawing.Rectangle(0, 0, bmp_in.Width, bmp_in.Height)
 
        ' Eine Arbeits-Bitmap (24-Bit pro Pixel) 
        ' in der erforderlichen Größe erstellen 
        Dim bmp As New System.Drawing.Bitmap(bmp_in.Width, bmp_in.Height, _
          Drawing.Imaging.PixelFormat.Format24bppRgb)
 
 
 
        ' Liegt bereits eine 24-Bit-Bitmap vor?
        If bmp_in.PixelFormat <> Drawing.Imaging.PixelFormat.Format32bppArgb Then
            ' Ein Zeichnenobjekt für 'bmp' erstellen
            Dim mg As Drawing.Graphics = Drawing.Graphics.FromImage(bmp)
 
            ' Die geladene Bitmap in 'bmp' neu zeichnen 
            mg.DrawImage(bmp_in, bmp_rect)
 
            ' Zeichnen-Ressourcen freigeben
            mg.Dispose()
        Else
            ' Verweis auf geladene Bitmap setzen
            bmp = bmp_in.Clone(bmp_rect, bmp_in.PixelFormat)
        End If
 
 
 
        ' Bilddaten (ggf. Ausschnitt) im Speicher sperren
        Dim bmp_data As Drawing.Imaging.BitmapData = _
          bmp.LockBits(bmp_rect, Drawing.Imaging.ImageLockMode.ReadWrite, _
          bmp.PixelFormat)
 
        ' Adresse des Beginns der Bitmap-Bilddaten ermitteln
        Dim bmp_ptr As IntPtr = bmp_data.Scan0
 
        ' Array für Bitmapdaten in geeigneter Größe erstellen
        ' (24-Bit-Bitmap: 4 Byte / Pixel in Bildbreite)
        Dim bmp_bytes As Integer = bmp.Width * bmp.Height * 4
 
        ' Null-basiertes Byte-Array (muss eindimensional sein)
        ' in der erforderlichen Größe vereinbaren
        Dim bmp_array(0 To bmp_bytes - 1) As Byte
 
        ' Die Bitmapdaten in das Array kopieren
        Runtime.InteropServices.Marshal.Copy(bmp_ptr, bmp_array, 0, bmp_bytes)
 
 
        ' Bearbeitungsvektor für Pixel-Bytes erstellen
        ' =============================================
        Dim bearb_vek() As Byte
        ReDim bearb_vek(0 To Byte.MaxValue)
        ' Vektor initialisieren (=kein Effekt)
        For x = 0 To Byte.MaxValue
            bearb_vek(x) = CByte(x)
        Next x
 
 
 
        ' Die Bilddaten bearbeiten
        ' (Doppelschleife mit y-x-pixelbezogenem Zugriff 
        ' auf die Daten im Array)
        Dim alpha As Double = 0
        For y = 1 To bmp.Height
            alpha = alpha + (1 / bmp.Height)
            For x = 1 To bmp.Width
 
                ' Array-Index, 
                ' falls das gesamte Bild bearbeitet wird
                Byte_Index += 4
 
                ' vier Byte/Pixel an Position x,y modifizieren
                ' Reihung allerdings je nach Hardware: 
                ' Rot - Grün - Blau oder Blau - Grün - Rot
 
                ' Anwendung des Bearbeitungsvektors 
                ' ===================================
                bmp_array(Byte_Index) = bearb_vek(bmp_array(Byte_Index))
                bmp_array(Byte_Index + 1) = bearb_vek(bmp_array(Byte_Index + 1))
                bmp_array(Byte_Index + 2) = bearb_vek(bmp_array(Byte_Index + 2))
 
                'bmp_array(Byte_Index + 3) = bearb_vek(bmp_array(Byte_Index + 
                ' 3))
 
                bmp_array(Byte_Index + 3) = bearb_vek(bmp_array(Byte_Index + 3) _
                  * (TopTransparent / 100) * alpha)  ' Transparenz? 
 
 
            Next x
        Next y
 
 
 
 
        ' Die modifizierten Arraydaten 
        ' in die Bitmap zurück-kopieren 
        Runtime.InteropServices.Marshal.Copy(bmp_array, 0, bmp_ptr, bmp_bytes)
 
        ' Die gesperrten Bilddaten (ggf. Ausschnitt) 
        ' im Speicher wieder freigeben
        bmp.UnlockBits(bmp_data)
 
 
 
        Return bmp
 
    End Function
Das ganze dauert jetzt nur noch 25 msek. Das reicht mir!

Danke nochmals
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tranzparenter Verlauf ?1.149Longri11.03.08 18:58
Re: Tranzparenter Verlauf ?680Christian2512.03.08 00:20
Re: Tranzparenter Verlauf ?659Longri12.03.08 09:18
Re: Tranzparenter Verlauf ?670Longri12.03.08 12:30

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