vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 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
Grafik transparent drehen und zoomen - Hilfe beim Ändern des Codes 
Autor: Phip
Datum: 06.12.04 21:38

Hallo zusammen,

Ich hab' mir von ActiveVB (www.activevb.de) einen Source zum einfachen drehen und zoomen von Bitmaps runtergeladen. Leider unterstützt der nur 24-Bit Bitmaps, da er mit SaveArrays arbeitet. Für meine Zwecke sollte ich aber 32-Bits zur Verfügung haben...

Die Zeilen zum erstellen des Arrays:
    Call GetObject(hDestDC.hBitmap, Len(BmpD), BmpD)
    Call GetObject(hSrcDC.hBitmap, Len(BmpS), BmpS)
 
    'Es werden nur 24-Bit Bitmaps unterstützt
    If BmpS.bmBitsPixel <> 24 Then
        Call Err.Raise(99999, , "Only 24-Bit bitmaps are supported!")
    End If
 
    With sD
        .cbElements = 1
        .cDims = 2
        .Bounds(0).lLbound = 0
        .Bounds(0).cElements = BmpD.bmHeight
        .Bounds(1).lLbound = 0
        .Bounds(1).cElements = BmpD.bmWidthBytes
        .pvData = BmpD.bmBits
    End With
 
    Call CopyMemory(ByVal VarPtrArray(PictD), VarPtr(sD), 4)
 
    With sS
        .cbElements = 1
        .cDims = 2
        .Bounds(0).lLbound = 0
        .Bounds(0).cElements = BmpS.bmHeight
        .Bounds(1).lLbound = 0
        .Bounds(1).cElements = BmpS.bmWidthBytes
        .pvData = BmpS.bmBits
    End With
 
    Call CopyMemory(ByVal VarPtrArray(PictS), VarPtr(sS), 4)
Zum zeichnen sieht das dann so aus:
                    'Pixelwerte aus source-bitmap erfassen
                    srcR = PictS(csc * 3, rsc)
                    srcG = PictS(csc * 3 + 1, rsc)
                    srcB = PictS(csc * 3 + 2, rsc)
                    If srcR <> TransR And srcG <> transG And _
                      srcB <> transG Then
 
                        'nicht transparent also COPY!
                        PictD(cd * 3, rd) = srcR
                        PictD(cd * 3 + 1, rd) = srcG
                        PictD(cd * 3 + 2, rd) = srcB
                    End If
                End If
            End If
            rs = rs + 1
        Next rd
    Next cd
 
    Call CopyMemory(ByVal VarPtrArray(PictD), 0&, 4)
    Call CopyMemory(ByVal VarPtrArray(PictS), 0&, 4)
Die Zeilen mit PictD(csc * 3 + 1, rsc) und so hab' ich schonmal in * 4 geändert, damit er in 4-Byte-Schritten vorwärtskommt. Allerdings erzeugt das wie schon fast zu erwarten den LZF "Index ausserhalb des gültigen Bereichs".
Was muss ich da noch ändern, damit das für 32-Bit Bitmaps funktioniert?

Danke schonmal!

PS: Leider kann ich nicht die ganze Prozedur posten, da sie zu gross für's Forum ist... Wo liegt denn da die Grenze?

Der Computer hilft uns Probleme zu l?sen, die wir ohne ihn nicht h?tten ;)

mfg Phip

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Grafik transparent drehen und zoomen - Hilfe beim Ändern des...634Phip06.12.04 21:38
Re: Grafik transparent drehen und zoomen - Hilfe beim Ändern...430Phip08.12.04 10:54

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