Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Läpinäkyvä(vb)

Sivun loppuun

LL [27.10.2002 20:10:02]

#

Mitenkä sais määritettyä johonkin kuvaan läpinäkyvän väriin niin että pelissä näkyisi pelkkä piiretty kuva? Eli jos on piirtänyt tankin valkoiselle taustalle, niin pelissä näkyisi pelkää tankki eikä sen ympärillä olevaa valkoista taustaa?

tuobbi-89 [27.10.2002 20:21:18]

#

Tuo on muuten ollut minullakin ongelmana jonkin aikaa. Lienee tosin vaikea kehittää, ja olen vieläpä aloittelija VB:n parissa. Tietäisikö tosiaan joku Antti L:n tapainen VB-superguru ratkaisun? :)

Gevil [27.10.2002 21:12:13]

#

Teet vaikka PSP:llä transparent GIF-kuvan ja sitten isket sen sinne ohjelmaas. Ohjelmassa sitten käytät BitBlt:tä. Muistaakseni tulee VB:n mukana esimerkki ja onhan täälläkin BitBlt koodivinkkejä..

LL [27.10.2002 21:20:24]

#

Ei PSP toimi enää. Tuli leikittyä kellon windowsin kellon kanssa.

LL [27.10.2002 21:20:45]

#

siis windowsin kellon

tuobbi-89 [27.10.2002 21:22:21]

#

Mulla ei oo PSP:tä enkä jaksa imuttaa kun on 32 mt!

Antti Laaksonen [27.10.2002 21:24:33]

#

Vaihtoehtoja on kaksi, helpompi=hidas, vaikeampi=nopea.

Helpompi=hidas: tee gif-kuva, jonka taustaväri on läpinäkyvä ja lataa kuva Imageen

Vaikeampi=nopea: käytä sprite-tekniikkaa: tarvitaan kaksi kuvaa, joista toinen sisältää itse kuvan mustalla taustalla ja toinen taustavärin valkoisena ja kaiken muun mustana. Kun nämä kuvat yhdistetään BitBlt:llä sopivilla parametreilla, tausta jää läpinäkyväksi.

Tässä on toinen vähintään yhtä sekava selitys:
https://www.ohjelmointiputka.net/keskustelu/706-aloittelijan-sprite-kysymyksiä

Ja jos VB:si mukana on esimerkkiprojekti calldlls.vbp, tutki sitä - siinä pomppiva pallo on toteutettu juuri tällä tekniikalla.

LL [27.10.2002 21:27:46]

#

"..gif kuva jonka taustaväri on läpinäkyvä..."

Tyhmä kysymys: Siis mitenkä sen saa läpinäkyväksi?

Antti Laaksonen [27.10.2002 22:08:31]

#

GIF-kuvan taustan saa läpinäkyväksi määrittämällä jonkun sen väreistä läpinäkyväksi, tämän tekeminen riippuu täysin käytettävästä grafiikkaohjelmasta. Mutta useimmiten se löytyy jostain kuvan asetuksista, esimerkiksi Transparency-alakohdasta.

tuobbi-89 [27.10.2002 22:12:46]

#

Oukei...

Vilikki [28.10.2002 15:56:55]

#

lainaus:

Oukei...

Oletko varmasti lukenut nuo säännöt faq:sta? Ei kuittailuja...

Gevil [28.10.2002 17:47:59]

#

Joissakin grafiikkaohjelmissa voidaan kuvan läpinäkyvyys(transparency)määrittää 'exportin' yhteydessä. Siis se väri tai layeri jonka haluaa läpinäkyväksi määritellään 'exportattaessa' kuvaa GIFiksi..

Gevil [28.10.2002 17:52:38]

#

Antti L. joko on valmistumassa se BitBlt opas, mistä mainitsit esimerkiksi tuolla antamassasi keskustelussa. Opas ehkä avaisi BitBlt:n salat. Oppaassa oli hyvä olla pari esimerkki kuvaakin. Käsittääkseni olet tekemässä WinAPI opasta, tuleeko BitBlt kenties tämän yhteyteen?

Pekka Kauppila [28.10.2002 19:39:58]

#

Tiedoksi vaan, että saa myös BMP-kuvan taustan läpinäkyväksi. Tietysti kuva ei silloin saa olla maksimissaan kuin 256 värinen. En tiedä sitten, että miten se toimii Visual Basicissa.

Antti Laaksonen [28.10.2002 20:00:17]

#

lainaus:

Antti L. joko on valmistumassa se BitBlt opas, mistä mainitsit esimerkiksi tuolla antamassasi keskustelussa.

Oppaaseen on tullut erinäisiä viivästyksiä, mutta valmistumassa se on. VB-opas 9 tulee käsittelemään WinApi:a, BitBlt-opas on sitten oma kokonaisuutensa.

lainaus:

Tiedoksi vaan, että saa myös BMP-kuvan taustan läpinäkyväksi.

Saako? Ei ainakaan minun ohjelmillani onnistu. Eikä BMP-formaatin määrittelystä löydy mitään läpinäkyvyydestä.

LL [28.10.2002 20:27:06]

#

Nyt sain toimimaan. Kiitos avusta!

Antti [06.11.2002 10:11:58]

#

Juu... homma onnistuu myös kuvaa käpistelemällä, mutta windowsin API:sta löytyy menetelmät, jolla objektin muodon saa muunkin laiseksi kuin neliöksi. Seuraavassa koodit, joilla se onnistuu ikkunaan.

Homma toimii seuraavasti:
1. Luo uusi projekti
2. Luo uusi moduli, jonka nimeksi ApiServices
3. Aseta lomakkeen kooksi: Width 3450 ja Height 6705
... ja seuraavat koodit:

'**********************************************
' Nämä omaan moduliin jonka nimi on ApiServices
'**********************************************
Public Type POINTAPI
        x As Long
        y As Long
End Type

Public Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

' sets a region to window object
Public Declare Function SetWindowRgn Lib "User32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
' creates a polygonal region
Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
' deletes a created region
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long


'**********************************
' Ja lomakkeen koodiin
'**********************************
Private Sub Form_Load()

' create non rectangular window
Dim xp(43) As POINTAPI
'upperedge leftside
xp(0).x = 0
xp(0).y = 35
xp(1).x = 26
xp(1).y = 18
xp(2).x = 57
xp(2).y = 8
xp(3).x = 86
xp(3).y = 3
'upperedge centralpoint
xp(4).x = 115
xp(4).y = 0
'upper hole
xp(5).x = 115
xp(5).y = 8
xp(6).x = 109
xp(6).y = 11
xp(7).x = 108
xp(7).y = 16
xp(8).x = 110
xp(8).y = 21
xp(9).x = 116
xp(9).y = 23
xp(10).x = 119
xp(10).y = 21
xp(11).x = 122
xp(11).y = 16
xp(12).x = 119
xp(12).y = 11
xp(13).x = 115
xp(13).y = 8
xp(14).x = 115
xp(14).y = 0
'upperedge right
xp(15).x = 141
xp(15).y = 3
xp(16).x = 171
xp(16).y = 8
xp(17).x = 203
xp(17).y = 18
xp(18).x = 226
xp(18).y = 35
' rightside
xp(19).x = 233
xp(19).y = 90
xp(20).x = 235
xp(20).y = 205
xp(21).x = 233
xp(21).y = 300
'loweredge right
xp(22).x = 226
xp(22).y = 410
xp(23).x = 199
xp(23).y = 425
xp(24).x = 172
xp(24).y = 435
xp(25).x = 141
xp(25).y = 443
'loweredge centerpoint
xp(26).x = 115
xp(26).y = 447
' lowerhole
xp(27).x = 115
xp(27).y = 439
xp(28).x = 119
xp(28).y = 437
xp(29).x = 121
xp(29).y = 432
xp(30).x = 119
xp(30).y = 427
xp(31).x = 116
xp(31).y = 425
xp(32).x = 109
xp(32).y = 427
xp(33).x = 107
xp(33).y = 432
xp(34).x = 109
xp(34).y = 437
xp(35).x = 115
xp(35).y = 439
xp(36).x = 115
xp(36).y = 447
'loweredge leftside
xp(37).x = 86
xp(37).y = 443
xp(38).x = 57
xp(38).y = 435
xp(39).x = 26
xp(39).y = 425
xp(40).x = 0
xp(40).y = 410
xp(41).x = 5
xp(41).y = 400
xp(42).x = 5
xp(42).y = 45

' create polygonal region from given points
arec = Apiservices.CreatePolygonRgn(xp(0), 43, 2)
' set region to window
Apiservices.SetWindowRgn Me.hWnd, arec, True

End Sub

Koodi saa aikaiseksi suorakaiteen muotoisen pysty lomakeen, jonka ylä- ja alalaita ovat kaarevat. Ylä- ja alalaidassa lomaketta on lomakeessa todellinen reikä.

Lomakieen muotoa voi käpistellä muokkaamalla xp(n)POINTAPI:n koordinaatteja. Koordinaatit määritellään myötäpäivään lomakeen ympäri.

Sellaista...

Gevil [06.11.2002 15:42:02]

#

Ei jumalauta :) Tuohan on nerokas koodi, tuolla tavalla varmaan tehdään peleihin ne ympyrän (tms) muotoiset aloitusformit.

Antti [06.11.2002 16:08:00]

#

Täysin omaa koodia - kirjoitin sen eräseen projektiin, jossa piti luoda erikoinen käyttöliittymä graafikon visioiden mukaan. Saa vapaasti käyttää lainata ja muokata ;)

Koodi luo lomakkeen vasempaan laitaan loven, josta tuli napsauttamalla ulos vedettävä toinen lomake rinnalle, jossa oli erilaisia asetuksia...


Sivun alkuun

Vastaus

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

Tietoa sivustosta