Datatyyppien käyttö kuvien latauksess...

Saku-foorumi » Classic Amiga » Ohjelmointi » Viestit 2002 » Datatyyppien käyttö kuvien latauksessa « Edellinen Seuraava »

Kirjoittaja Viesti
 

J.
Lauantaina, 24. elokuuta, 2002 - klo 22.04:   
Olen kokeillut jonkin verran datatyyppien käyttöä kuvien lataamisessa StormC:llä. Kuvan lataaminen objektiksi ja liittäminen ikkunaan onnistuu varsin vaivattomasti mutta pitemmälle pääsyä hankaloittaa ohjeiden epäselvyys (Stormin online-help ei ole kovin kummoinen).

Headereita tutkimalla olen huomannut että datatype-objektin attribuuteissa on jokin "Bitmap" attribuutti (PDTA_BitMap). Palauttaako tämä osoitteen ladatun grafiikan BitMap-struktuuriin vai pitääkö tuo kaivaa esiin muulla tavoin ?

Eräs epäselvyys ilmeni kun kokeilin ladata kaksi tyystin erilaista kuvaa WB-ikkunaan päällekäin. Toinen kuva oli low-res 32-värinen kuva, toinen 24-bittinen hi-res rendaus. Kuvat tulivat WB:hen (1600x1200 16-bittisenä) avattuun ikkunaan varsin mukavasti ja näyttivät ihan hyviltä mutta kun kokeilin hakea kuvien värimäärää DT-attribuutin (muistaakseni DTA_NumColors) kautta 24-bittinen kuva antoikin arvoksi 16. Mistä mättää ?

J.

 

Jon
Sunnuntaina, 25. elokuuta, 2002 - klo 15.03:   
Olisiko se johtunut WB:n värimäärästä?

Onko sinulla ollut päivitysongelmia kuvaobjektien kanssa?

Minulla on yksi pieni projekti joka käyttää GadTools-namikoita ja lataa piruuttaa pienen kuvan ikkunaan.

Kuva ilmestyy vasta jos käytän ikkunaan jonkin toisen ikkunan takana, ts. ikkunan sisältö uudelleen piirretään uudelleen.

 

JPQ
Sunnuntaina, 25. elokuuta, 2002 - klo 16.14:   
Ja ptää miettiä miten se 24-bittisten tuki on tehty koska se on kait jälkikäteenl lisätty näin olen käsittänyt. Eikai sitä jollain tietyllä bitillä ilmaista että kuva on 24bittinnen?
Tämä on pelkkä puhdas teoria jolle saattoi olla jossain tukeakin. PS. Tekisin itsekkin tällä tiedolla ehkä jotain...

 

J.
Maanantaina, 26. elokuuta, 2002 - klo 12.25:   
Jon:

Värimäärästä todennäköisesti johtuu. Kokeilin tuota vielä uudestaan 256-värisellä kuvalla ja se toimi ihan OK (eli näytti värimääräksi 256).

Itse sain kuvan heti (noh, suhteellisen heti, toki tuossa meni aikaa kun se latasi kuvan, remappasi sen ja heitti ikkunaan) näkyviin kun käytin Refresh-funktiota (muistaakseni jokin RefreshDTObject). Ei edes itsellä tullut kokeiltua ikkunan heittämistä alle kun tuo testiohjelma oli niin simppeli (avaa ikkuna, lataa kuva datatyypillä, heitä kuva ikkunaan, odota Delay-funktiolla 10 sekkaa, vapauta objekti ja sulje ikkuna). Ikkunassa ei edes ollut otsikkopalkkia saati sitten depth-gadgettia joten tuo ei edes olisi ollut mahdollista (tai no, toisen ikkunan olisi voinut väliaikaisesti nostaa sen päälle).

Edelleen: onko tuo Bitmap-attribuutti sen grafiikan BitMap-struktuurin osoite ? Osaako joku sanoa vai pitääkö testata itse ?

 

Jon
Maanantaina, 26. elokuuta, 2002 - klo 13.42:   
Noinhan sen pitäisikin toimia..Pitää tutkia vielä omaa softaa. Muistaakseni käytän GT_RefreshWindow() ja RefreshDTObjectia() ennen tapahtumakäsittelijään siirtymistä. Tämä voi kyllä siitä bugista (arrgggh) että olin määritellyt kerran IntuiMsg->Class-muuttujan tyypiksi UWORDin, kun olisi pitänyt olla ULONG! :(

Ja sitten tietenkin menestyksekkäästi copy-pastannut bugia muuallekin :)

Enpä osaa vastata tuohon kysymykseen kun ei ole dokumentteja käsillä, mutta spekuloin voisiko se olla itse luodun grafiikan bitmap-osoite?

 

itix
Perjantaina, 30. elokuuta, 2002 - klo 5.18:   
PDTA_BitMap palauttaa alkuperäisen datatyypin rakentaman bitmapin, ei siis välttämättä sitä bitmappia mikä ruudulla näkyy.

PDTA_DestBitMap taas palauttaa ruudulla näkyvän bitmapin eli sen remapatun version joka näkyy. Molemmat tagit kyllä palauttavat osoittimen BitMap-struktuuriin.

PDTA_NumColors on ehkä huono värimäärän selvittämiseen. Jos näytät 24-bittistä kuvaa 16-bittisellä näytöllä niin värimäärä tippuu automaattisesti 16-bittiseksi myös. Joten siinä mielessä se toimi aivan oikein. Jos haluat tietää kuinka monta väriä kuvassa alunperin oli käpistele luokan tekemää BitMappia GetBitMapAttr()lla.

 

el
Lauantaina, 31. elokuuta, 2002 - klo 13.37:   
Miten muuten datatypejä käyttäen ladataan kuva? Jos on liian pitkä näyttää foorumilla esimerkki, niin asiasta voisi kirjoittaa jutun Sakuun.

 

Anu Seilonen
Lauantaina, 31. elokuuta, 2002 - klo 14.13:   
Sakuun sopisi mainiosti tuollaisia pieniä "pikaoppaita" eri ohjelmointiaiheista, ei niiden välttämättä tarvitse olla täysimittaisia artikkeleita. Viime numeroiden ohjelmointijuttuja on kovasti kiitelty. Pienetkin pikajutut voi toimittaa tänne: thoriel@sci.fi. Saku #40:n julkaisupäivä on sunnuntai 8.9., jutut perille mielellään keskiviikkona 4.9. Pienet jutut ehtivät myöhemminkin.

 

JPQ
Lauantaina, 31. elokuuta, 2002 - klo 21.29:   
el: minäkin haluaaisin selkeät ohjeet ja tallennukseenkin kun musta jotkut datatyypit sallii senkin.

 

J.
Sunnuntaina, 1. syyskuuta, 2002 - klo 16.38:   
el: itse latasin kuvan tuossa testissä (lähinnä testasin sen toimivuutta) seuraavasti:

-Ensin määritellään merkkijono jossa on ladattavan tiedoston nimi polkuineen. Merkkijonomuuttujan nimi oli FileName ja se oli normaali char[]-tyyppinen taulukko.
-Kuvan lataus tapahtui funktiolla NewDTObjectA muodossa DTObjPtr=NewDTObjectA((APTR)FileName,NULL). Sen jälkeen tarkistin ettei tuo DTObjPtr ollut NULL (lataus epäonnistui). Tuo osoitin oli datatypeobjektiin ja sen saattoi esimerkiksi liittää ikkunaan. Voisin pistää vähän tarkempaakin ohjetta jos kiinnostusta on.

 

el
Sunnuntaina, 1. syyskuuta, 2002 - klo 17.34:   
Kyllä minua hieman tarkemmat ohjeet kiinnostaisi. :) Voisitko liittää ihan selvää ohjelmakoodia mukaan.

 

itix
Sunnuntaina, 1. syyskuuta, 2002 - klo 23.43:   
Voisin huomenna pyöräyttää lyhyen ohjelmakoodin lehteä varten, Joku sellainen joka vain lataa kuvan (ei liitä sitä mihinkään) ja tekee tarvittaessa mask planen. Satuin nimittäin juuri itse tarvitsemaan tuollaista niin rutiini olisi lähes valmiina :)

 

Jon
Maanantaina, 2. syyskuuta, 2002 - klo 11.07:   
Kaikki ohjelmointiasia on tervetullutta. Tulee ihan nostalgiset muistot mieleen ajoilta jolloin C=-lehti ilmestyi ja Bitissäkin oli asiaa eikä trendihömppää :)

Itse olisin kiinnostunut lukemaan kaiken mahdollisen 3D-grafiikan luomisesta sekä esim. Warp3D:stä tai OpenGL:stä.

 

el
Tiistaina, 3. syyskuuta, 2002 - klo 21.17:   
Itix, voitko kuitenkin vielä vaikka foorumilla näyttää, miten se kuva liitetään esim. ikkunaan?

 

itix
Keskiviikkona, 4. syyskuuta, 2002 - klo 2.29:   
En ole koskaan varsinaisesti liittänyt kuvaa ikkunaan datatyyppisysteemillä vaan blitannut ihan suoraan bitmapista.

Eli esimerkiksi kun objekti on saatu auki olen tehnyt seuraavaa:

DoMethod(obj, DTM_PROCLAYOUT, NULL, 1);
GetDTAttrs(obj,
PDTA_DestBitMap, &bitmap,
TAG_DONE);


Sitten kun kuva on täytynyt saada näkyviin olen vain kutsunut BltBitMapRastport()ia eli

BltBitMapRastPort(bitmap, srcx, srcy, rp, dstx, dsty, width, height, 0xc0);

Periaatteessa objektin voisi liittää ikkunaan myös gadgettina mutten ole siihen puoleen perehtynyt sillä olen enemmänkin MUI-miehiä ;) Mutta muistaakseni esim. AddGadget() toimii objekteille myös vallan mainiosti... pitäisi joskus testata :)

 

J.
Keskiviikkona, 4. syyskuuta, 2002 - klo 9.10:   
el, itix: Datatyypin liittäminen ikkunaan on itse asiassa helppoa. Sen saattoi tehdä tietyllä funktiolla (muistaakseni AddDTObject tai jotain) jolle annettiin parametrina ikkunan window-struktin osoite ja datatyyppi-objektin osoite ja se siitä. Yritän katsoa sen tänä iltana ja pistää vähän ohjetta.

 

itix
Keskiviikkona, 4. syyskuuta, 2002 - klo 16.35:   
J., olet aivan oikeassa. Tarkistin dokumentit:

AddDTObject(omaikkuna, NULL, obj, -1);

Ylläoleva kutsu liittää objektin ikkunaan. RemoveDTObject(omaikkuna, obj); taas poistaa objektin ikkunasta. Helppoa todellakin :)

Lisää viestisi tähän
Viestisi:
Käyttäjätunnus: Postitus informaatiota:
Tämä on yksityinen keskustelupalsta. Vain rekisteröidyt käyttäjät ja moderaattorit voivat postittaa tänne.
Salasana:
valinnat: Aktivoi URL:t automaattisesti tässä viestissä
Toimenpide: