Avatar billede nanosoft00 Nybegynder
15. oktober 2004 - 14:53 Der er 3 kommentarer og
1 løsning

hvordan gemmes en "Device Context" i en bmp?

Jeg har en form med 2x PictureBox på, jeg vil så gerne have kopieret den ene over på den anden. Dette vil jeg gøre via dette kode.

############
Private Declare Function CreateCompatibleDC Lib "GDI32.dll" (ByVal hDC As Long) As Long

Private Declare Function DeleteDC Lib "GDI32.dll" (ByVal hDC As Long) As Long

Private Declare Function SelectObject Lib "GDI32.dll" ( _
    ByVal hDC As Long, ByVal hObject As Long) As Long

Private Declare Function BitBlt Lib "GDI32.dll" (ByVal hdcDest As Long, _
    ByVal nXDest As Long, ByVal nYDest As Long, ByVal nWidth As Long, _
    ByVal nHeight As Long, ByVal hdcSrc As Long, ByVal nXSrc As Long, _
    ByVal nYSrc As Long, ByVal dwRop As Long) As Long
   
Private Sub Command1_Click()
    'kopier billede
    Dim hDC As Long, hOldBmp As Long
   
    hDC = CreateCompatibleDC(0&)
    hOldBmp = SelectObject(hDC, Picture1.Picture.Handle)
    Call BitBlt(Picture2.hDC, 0, 0, 100, 100, hDC, 0, 0, vbSrcCopy)
   
    Call SelectObject(hDC, hOldBmp)
    Call DeleteDC(hDC)
End Sub

Private Sub Command2_Click()
    'Test ved at sætte billidet i clipboard
    Clipboard.Clear
    Clipboard.SetData Picture2.Image
End Sub
###

billidet bliver godt nok kopieret fra picture1 til picture2 på formen, men billedet er ikke tilgængeligt via "Picture2.Image"

dette er kun en test app, i min rigtige app har jeg kun et hDC handle at kopiere fra, derfor bruger jeg "BitBlt()"

dvs. formålet er at kopiere fra hDC til Picture2.Image
Avatar billede nanosoft00 Nybegynder
15. oktober 2004 - 15:19 #1
Picture2.Image indenholder et blankt bitmap og IKKE det der er blevet BitBlt() over på Picture2
Avatar billede sjh Nybegynder
15. oktober 2004 - 16:40 #2
Private Sub Command1_Click()
    'kopier billede
    Dim hDC As Long, hOldBmp As Long
   
    hDC = CreateCompatibleDC(0&)
    hOldBmp = SelectObject(hDC, Picture1.Picture.Handle)
    Call BitBlt(Picture2.hDC, 0, 0, 100, 100, hDC, 0, 0, vbSrcCopy)
    Call SelectObject(hDC, hOldBmp)
    Call DeleteDC(hDC)

    Picture2.Refresh '<- Jeg har edit her
End Sub

Private Sub Form_Load()
  Picture2.AutoRedraw = True
End Sub
Avatar billede nanosoft00 Nybegynder
15. oktober 2004 - 16:55 #3
damm... skulle der virkelig ikke mere til...
nå men det virker i min test app, jeg skal lige se om det også virker i den rigtige
Avatar billede nanosoft00 Nybegynder
15. oktober 2004 - 16:57 #4
SMUKT :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester