Mikähän olisi kaikkein nopein tapa saada kuvasta kopioitua tietty alue PictureBoxiin tiettyyn kohtaan.
Esimerkkikoodi olisi tarpeen.. :)
PictureBox sisältää valmiin komennon PaintPicture, mutta nopeampaa on käyttää WinApin BitBlt-funktiota. Funktion syntaksi on (MSDN:stä):
BOOL BitBlt( HDC hdcDest, // kohdekuvan kahva int nXDest, // kohdekuvan x-koordinaatti int nYDest, // kohdekuvan y-koordinaatti int nWidth, // kuvan leveys int nHeight, // kuvan korkeus HDC hdcSrc, // lähdekuvan kahva int nXSrc, // lähdekuvan x-koordinaatti int nYSrc, // lähdekuvan y-koordinaatti DWORD dwRop // kopiointitapa );
Lähdekuva on kuva josta kopioidaan ja kohdekuva on kuva johon kopioidaan. VB:ssä tämä voi olla esimerkiksi formi tai kuvakehys. Kahva löytyy objektin hDC-muuttujasta.
Huomaa, että BitBlt käyttää pikseleitä, kun taas VB:ssä mittayksikkö on oletuksena twip. Kannattaa ehkä vaihtaa formin ScaleMode 3:ksi (Pixel), jolloin mitta-asteikot ovat yhtenevät.
Jos kuva kopioidaan tavallisesti, kopiointitapa on SRCCOPY (&HCC0020). On myös mahdollista käyttää VB:n omaa vakiota vbSrcCopy.
Lopuksi pieni esimerkki, joka kopioi kuvan kuvakehyksestä toiseen.
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source Private Sub Form_Click() Dim x As Long 'kopioidaan kuva Picture1:sta Picture2:een '- kuvan koko on 50x50 pikseliä '- kuva kopioidaan Picture1:sta kohdasta (0, 0) '- kuva kopioidaan Picture2:een kohtaan (40, 60) '- kuva kopioidaan tavallisesti (SRCCOPY) x = BitBlt(Picture2.hDC, 40, 60, 50, 50, Picture1.hDC, 0, 0, SRCCOPY) End Sub
Kiitos! :) Tälle on käyttöä!
Aihe on jo aika vanha, joten et voi enää vastata siihen.