Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

Anbefalte innlegg

Heisann

 

Driver å tester ut PlgBlt-funksjonen her nå, men får det ikke helt til. Som jeg har skjønt skal jeg skrive fargen på "maske-fargen" i bildet, på hbmMask. Er det riktig? Kan det umulig være siden det ikke funker :p Noen som vet hvordan jeg gjør det?

 

http://www.Planet-Source-Code.com/vb/scrip...=13868&lngWId=1

http://msdn.microsoft.com/library/default....itmaps_2dis.asp

 

Jonas

 

Edit: Ta vedlegget som eksempel. Den lilla fargen er 16744577, men denne koden virker ikke:

PlgBlt picDST.hDC, Pts(0), picSRC.hDC, 0, 0, picSRC.ScaleWidth, picSRC.ScaleHeight, 16744577, 0, 0

Edit: Ser ut som man må trykke på bildet for å se det.

post-32-1103050565.jpg

Endret av Jonas
Lenke til kommentar
Videoannonse
Annonse

Jeg tror du har misforstått denne paramenteren. I følge MSDN skal den peke til et svart-hvit bilde, som vist her:

 

hbmMask

    [in] Handle to an optional monochrome bitmap that is used to mask the colors of the source rectangle.

 

[...]

 

If the bitmask exists, a value of one in the mask indicates that the source pixel color should be copied to the destination. A value of zero in the mask indicates that the destination pixel color is not to be changed. If the mask rectangle is smaller than the source and destination rectangles, the function replicates the mask pattern.

 

Et slikt bilde kan være omtrent som dette:

 

mask4fc.png

Lenke til kommentar

Peke med .Hdc da? Vedlegget er Picture1, og dette er koden:

PlgBlt picDST.hDC, Pts(0), picSRC.hDC, 0, 0, picSRC.ScaleWidth, picSRC.ScaleHeight, Picture1.hDC, 0, 0

Men fortsatt vises ingen ting. Hva er galt nå?

 

Edit: Vedlegg-funksjonen borte!?!?

Edit: Lastet opp bildet:

mask.jpg

Endret av Jonas
Lenke til kommentar

Det later til at VB automatisk konverterer enfargete bilder om til flerfargete, slik at du dessverre må gjøre dette selv. Se bare på følgende eksempel:

 

Option Explicit

Private Declare Function PlgBlt Lib "gdi32" (ByVal hdcDest As Long, lpPoint As POINTAPI, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Type POINTAPI
   x As Long
   y As Long
End Type

Dim lBitmap As Long

Private Sub Form_Load()

   Dim Bits() As Long, Tell As Long
   
   Randomize
   
   ReDim Bits(90000 / 32 + 1)
   
   For Tell = LBound(Bits) To UBound(Bits)
       Bits(Tell) = Rnd * vbWhite
   Next

   lBitmap = CreateBitmap(300, 300, 1, 1, Bits(0))

End Sub

Private Sub Form_Paint()

   Dim Pt(0 To 2) As POINTAPI
   'set the coördinates of the parallelogram
   Pt(0).x = 30
   Pt(0).y = 10
   Pt(1).x = 300
   Pt(1).y = 0
   Pt(2).x = 0
   Pt(2).y = 300
   
   PlgBlt Me.hdc, Pt(0), GetDC(0), 0, 0, 300, 300, lBitmap, 0, 0

End Sub

Private Sub Form_Unload(Cancel As Integer)

   DeleteObject lBitmap

End Sub

 

Her skaper jeg bildet dynamisk, og ved hjelp av CreateBitmap og Rnd()-funskjonen; og da fungerer det hele ypperlig. Men jeg er ikke sikker på hva du kan gjøre videre.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...