| 
| Kirjoittaja | Viesti |  |       
 J.
 
 | 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).| Lauantaina,  24. elokuuta, 2002 - klo 22.04: |  | 
 
 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
 
 | Olisiko se johtunut WB:n värimäärästä?| Sunnuntaina,  25. elokuuta, 2002 - klo 15.03: |  | 
 
 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
 
 | 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?| Sunnuntaina,  25. elokuuta, 2002 - klo 16.14: |  | 
 Tämä on pelkkä puhdas teoria jolle saattoi olla jossain tukeakin. PS. Tekisin itsekkin tällä tiedolla ehkä jotain...
 
 
 |  |       
 J.
 
 | Jon:| Maanantaina,  26. elokuuta, 2002 - klo 12.25: |  | 
 
 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
 
 | 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!| Maanantaina,  26. elokuuta, 2002 - klo 13.42: |  | 
   
 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
 
 | PDTA_BitMap palauttaa alkuperäisen datatyypin rakentaman bitmapin, ei siis välttämättä sitä bitmappia mikä ruudulla näkyy.| Perjantaina,  30. elokuuta, 2002 - klo 5.18: |  | 
 
 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
 
 | Miten muuten datatypejä käyttäen ladataan kuva? Jos on liian pitkä näyttää foorumilla esimerkki, niin asiasta voisi kirjoittaa jutun Sakuun.| Lauantaina,  31. elokuuta, 2002 - klo 13.37: |  | 
 
 
 |  |       
 Anu Seilonen
 
 | 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.| Lauantaina,  31. elokuuta, 2002 - klo 14.13: |  | 
 
 
 |  |       
 JPQ
 
 | el: minäkin haluaaisin selkeät ohjeet ja tallennukseenkin kun musta jotkut datatyypit sallii senkin.| Lauantaina,  31. elokuuta, 2002 - klo 21.29: |  | 
 
 
 |  |       
 J.
 
 | el: itse latasin kuvan tuossa testissä (lähinnä testasin sen toimivuutta) seuraavasti:| Sunnuntaina,  1. syyskuuta, 2002 - klo 16.38: |  | 
 
 -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
 
 | Kyllä minua hieman tarkemmat ohjeet kiinnostaisi.| Sunnuntaina,  1. syyskuuta, 2002 - klo 17.34: |  | 
  Voisitko liittää ihan selvää ohjelmakoodia mukaan. 
 
 |  |       
 itix
 
 | 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| Sunnuntaina,  1. syyskuuta, 2002 - klo 23.43: |  | 
   
 
 |  |       
 Jon
 
 | Kaikki ohjelmointiasia on tervetullutta. Tulee ihan nostalgiset muistot mieleen ajoilta jolloin C=-lehti ilmestyi ja Bitissäkin oli asiaa eikä trendihömppää| Maanantaina,  2. syyskuuta, 2002 - klo 11.07: |  | 
   
 Itse olisin kiinnostunut lukemaan kaiken mahdollisen 3D-grafiikan luomisesta sekä esim. Warp3D:stä tai OpenGL:stä.
 
 
 |  |       
 el
 
 | Itix, voitko kuitenkin vielä vaikka foorumilla näyttää, miten se kuva liitetään esim. ikkunaan?| Tiistaina,  3. syyskuuta, 2002 - klo 21.17: |  | 
 
 
 |  |       
 itix
 
 | En ole koskaan varsinaisesti liittänyt kuvaa ikkunaan datatyyppisysteemillä vaan blitannut ihan suoraan bitmapista.| Keskiviikkona,  4. syyskuuta, 2002 - klo 2.29: |  | 
 
 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.
 
 | 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.| Keskiviikkona,  4. syyskuuta, 2002 - klo 9.10: |  | 
 
 
 |  |       
 itix
 
 | J., olet aivan oikeassa. Tarkistin dokumentit:| Keskiviikkona,  4. syyskuuta, 2002 - klo 16.35: |  | 
 
 AddDTObject(omaikkuna, NULL, obj, -1);
 
 Ylläoleva kutsu liittää objektin ikkunaan. RemoveDTObject(omaikkuna, obj); taas poistaa objektin ikkunasta. Helppoa todellakin
   
 
 |  |