Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: CreateBitmap, CreateCompatibleBitmap

Freeze [09.01.2011 11:01:14]

#

Hei!

Mustavalkoisen pienen bittikartan luonti:

Handle = CreateBitmap(Width, Height, 1&, 1&, 0&)

Värillisen bittikartan luonti:

Handle = CreateCompatibleBitmap(hDCfrom, Width, Height)

CreateBitmap Api on hyvä luomaan mustavalkoisia bittikarttoja. Ongelmaksi kuitenkin kehkeytyy niiden pieni sallittu koko. En tiedä tarkalleen missä kokoraja menee, mutta 150-170 pikselin leveys/korkeusarvojen tienoilla. Selvää kuitenkin on, ettei tämä postimerkin kokoinen läikkä riitä. CreateCompatibleBitmap sen sijaan luokin jo tyylikkään bittikartan hieman isompaankin tarpeeseen, mutta elämää suurempi kysymys on; miten sen saa mustavalkoiseksi? Tai jos sitä ei saa, miten voin luoda suuria kokoja tukevan mustavalkoisen bittikartan ?

EDIT: Poistin ylimääräisen partikkelin

jalski [09.01.2011 11:32:49]

#

Eikös tuo CreateCompatibleBitmap() luo oletuksena mustavalkoisen bittikartan, jos et anna sille parametriksi fyysistä ruudun DC:tä?

eli, jotain tälläistä:

hdc = GetDC(hWnd)
hdcMem = CreateCompatibleDC(hdc)
hBitmap = CreateCompatibleBitmap(hdcMem, 640, 480)

Jos tuolle CreateCompatibleBitmap() funktiolle antaisikin parametriksi hdc:n hdcMem:in sijaan, niin tuloksen pitäisi olla värillinen bittikartta.

Freeze [09.01.2011 12:22:50]

#

Oikeassa olet, jalski! :)

Ei tullut mieleen käydä pelaamaan hWndn kanssa noin. Pienen säädön jälkeen sainkin kelvollisen funktion aikaan. Jaan sen kanssanne.

Private Function makeDC(hDC As Long, hDCfrom As PictureBox, Handle As Long, xHandle As Long, Width As Long, Height As Long, Optional mcB As Boolean)
Dim tmpHandle As Long

If Not mcB Then
    hDC = CreateCompatibleDC(tmpHandle)
    Handle = CreateCompatibleBitmap(hDC, Width, Height)
    xHandle = SelectObject(hDC, Handle)
ElseIf mcB Then
    hDC = CreateCompatibleDC(hDCfrom)
    Handle = CreateCompatibleBitmap(hDCfrom.hDC, Width, Height)
    xHandle = SelectObject(hDC, Handle)
End If

End Function

EDIT: Korjasin turhuudet pois koodista, ja nyt se on hyvä. Ja koodi on hyvä silloin kun sen toiminnan lakkaa ymmärtämästä ;)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta