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-2025
 
zurück

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

Fortgeschrittene Programmierung
Re: Andere Maskenfarben als Magenta oder Schwarz? 
Autor: rubberring
Datum: 17.02.05 14:35

irgendwie muss es da ein workaround geben - mit der cdib klasse geht das nämlich ohne probleme unabhängig von der farbtiefe:

Public Sub AlphaBlend(ByRef dibToBlend As cDib, ByVal atX As Long, ByVal atY As _
  Long, ByVal Visibility As Long, ByVal ExCol As Long)
'does fast alpha blending
'Speed: **
Dim i As Long, j As Long
Dim sB() As Byte, sRB As Long
Dim sBN() As Byte, lSB As Long
Dim bSB() As Byte, bRB As Long      'used for the blended dib
Dim RealX As Long, RealY As Long    'final position of the blended
Dim RealW As Long, RealH As Long    '  pic after checking...
Dim Wid As Long, Hei As Long
Dim FirstPos As Long        'offset to start copying
Dim SourceVis As Long       'source visibility
Dim CurLine As Long, ExtX As Long, ExtY As Long
Dim jPlusLine As Long, iPlusj As Long
 
Wid = bmH.biWidth
Hei = bmH.biHeight
'add some foolproof code to avoid errors
If (Visibility <= 0) Or (Visibility > 100) Or (atX > Wid) Or (atY > _
  Hei) Then Exit Sub
 
'get out linear DIBs
sRB = Me.MapArray(sB)
bRB = dibToBlend.MapArray(bSB)
 
'check that picture is in a printable area
'this is to avoid Out of Bounds errors and to reduce computing time
'check width
If atX + dibToBlend.Width <= Wid Then
    If (dibToBlend.Width \ 2) Mod 2 = 0 Then
        If dibToBlend.Width Mod 2 = 0 Then
            RealW = bRB
        Else
            RealW = bRB - 1
        End If
    Else
        RealW = bRB - 5
    End If
Else
    RealW = (Wid - atX) * 3
End If
'check height
If atY + dibToBlend.Height <= Hei Then
    RealH = dibToBlend.Height
Else
    RealH = Hei - atY
End If
'check Xs
If atX < 0 Then
    RealW = RealW + atX * 3
    RealX = 3
    ExtX = dibToBlend.Width * 3 - RealW
ElseIf atX + dibToBlend.Width >= Wid Then
    RealW = (Wid - atX) * 3 - 3
    RealX = atX * 3
Else
    RealX = atX * 3
End If
'check Ys
If atY < 0 Then
    RealH = RealH + atY
    RealY = 0
ElseIf atY + RealH >= Hei Then
    RealY = atY
    ExtY = (dibToBlend.Height - RealH) * bRB
Else
    RealY = atY
End If
'we set an extra offset, try commenting this line and
'see what happens at the bottom and the left
CurLine = ExtX + ExtY
 
'set up the variables
lSB = UBound(sB) - 2
SourceVis = 100 - Visibility
 
FirstPos = lSB - (RealY * sRB) - (RealH * sRB) + RealX + 3
 
For i = FirstPos To FirstPos + (RealH * sRB) - sRB - bRB Step sRB
 
    For j = 0 To RealW Step 3
    jPlusLine = j + CurLine '+ ExtOffset
    iPlusj = i + j
    'check if pixel is transparent
        If RGB(bSB(jPlusLine + 2), bSB(jPlusLine + 1), bSB(jPlusLine)) <> _
          ExCol Then
 
            sB(iPlusj) = (SourceVis * sB(iPlusj) + bSB(jPlusLine) * Visibility) _
              \ 100
            sB(iPlusj + 1) = (SourceVis * sB(iPlusj + 1) + bSB(jPlusLine + 1) * _
            Visibility) \ 100
            sB(iPlusj + 2) = (SourceVis * sB(iPlusj + 2) + bSB(jPlusLine + 2) * _
            Visibility) \ 100
 
        End If
    Next
    CurLine = CurLine + bRB
Next
 
Erase sBN
Me.UnMapArray sB
'VB just loses it's mind if i try to unmap this array
'dibToBlend.UnMapArray bSB
End Sub
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Andere Maskenfarben als Magenta oder Schwarz?847rubberring16.02.05 19:27
Re: Andere Maskenfarben als Magenta oder Schwarz?495Zardoz17.02.05 12:11
Re: Andere Maskenfarben als Magenta oder Schwarz?520rubberring17.02.05 12:27
Re: Andere Maskenfarben als Magenta oder Schwarz?491rubberring17.02.05 12:30
Re: Andere Maskenfarben als Magenta oder Schwarz?473Zardoz17.02.05 13:28
Re: Andere Maskenfarben als Magenta oder Schwarz?445rubberring17.02.05 13:40
Re: Andere Maskenfarben als Magenta oder Schwarz?481rubberring17.02.05 14:14
Re: Andere Maskenfarben als Magenta oder Schwarz?457Zardoz17.02.05 14:25
Re: Andere Maskenfarben als Magenta oder Schwarz?489rubberring17.02.05 14:35
Re: Andere Maskenfarben als Magenta oder Schwarz?458rubberring25.02.05 14:54
Re: Andere Maskenfarben als Magenta oder Schwarz?458rubberring14.03.05 18:17
Re: Andere Maskenfarben als Magenta oder Schwarz?429rubberring15.03.05 17:19
Re: Andere Maskenfarben als Magenta oder Schwarz?430newdarkness16.03.05 22:10
Re: Andere Maskenfarben als Magenta oder Schwarz?440rubberring17.03.05 09:31

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