Closed aXu-AP closed 12 years ago
Yksi tämän tyylinen funktio on lisättynä. cbeDrawTintedScaledRotatedImageBox(img, startX As Float, startY As Float, width As Float, height As Float, toX As Float, toY As Float, scaleX As Float, scaleY As Float, angle As Float) Se on hieman monipuolisempi tosin hieman hankalampi käyttääkin.
Luonnollisestihan se näin on... muuttaako scaleX ja scaleY kuvan kokoa ennen vai jälkeen pyörittämisen? Mitä ovat toX ja toY? Funktion nimessä on Tinted, tarkoittaako se Color-värillä värjäämistä?
En ole ihan varma että mitä toX ja toY ovat. Niiden pitäisi mielestäni olla piirtokohdan keskipiste, mutta koska en ole itse tuota funktiota tehnyt niin en ole varma. Tältä näyttää toteutus sisäisesti:
al_draw_tinted_scaled_rotated_bitmap_region(
img, sx, sy, sw, sh, tint, sw*0.5, sh*0.5, dx, dy, xscale, yscale, angle / 180.0 * M_PI, 0
);
Muuttujien nimet ovat järjestyksessä seuraavat:
img
sx
sy
sw
sh
dx
dy
scalex
scaley
angle
Kuva tosiaan värjätään nykyisellä piirtovärillä, eli olet siinä oikeassa.
Juu. toX ja toY ovat koordinaatit mihin kuvan keskipiste sijoittuu. Kuvan kääntäminen tapahtuu myös keskipisteen ympäri.
Tuli muuten mieleen, että nuo toX ja toY ovat periaattessa turhat, sillä kuvillehan pystyy asettaa keskipisteen HotSpotilla. Vähemmän parametreja => yksinkertaisempi ja helpompi käyttää.
Ei se niin mene. toX ja toY määrittelevät piirtopisteen ja se on hyvinkin tärkeää. Pyöritetyillä kuvilla emme ala laskemaan HotSpotin arvoa vaan käytämme aina piirtopisteenä kuvan keskikohtaa.
Oops luinkin väärin, ajattelin noiden olevan se pyörityspiste... elikkäs sx, sy, sw ja sh määrittelevät siis miten kuva rajataan, vai (olin aikaisemmin ajatellut sx:n ja sy:n olevan piirtopiste)?
Juurikin näin, eli ne ovat rajausparametreja.
Tästähän tietty seuraa kysymys, saako tämän funktion myös ilman rajausparametreja? Useimmiten kuitenkin kuvat ovat valmiiksi rajattuja, ja neljän ylimääräisen parametrin (+kuvan koon selvittäminen joka kerta kun kuva piirretään voi vaikuttaa suorituskykyyn) kirjoittaminen hidastaa tuottavuutta ja hankaloittaa koodin lukua.
Joo kyllä on tulossa erilaisia piirtofunktioita. Tällä hetkellä olemme vain keskittyneet bugien korjailuihin enemmän kuin uusien erikoisfunktioiden tekemiseen.
Se onkin oikea tärkeysjärjestys, ehdottelen näitä funktioita kyllä aika tiuhaan... mutta sitä vartenhan tämä trackeri on, että ideat (ja bugiraportit) säilyy tallessa vaikka niitä ei heti toteutettaisi :)
EDIT: Toteutin ehdottamani funktion tuon nykyisen avulla (eli käytännössä tämä vain automatisoi noiden parametrien laskemisen), sisältää myös oletusparametrit, jolloin tätä voi käyttää DrawImagen tavoin (-framen ja maskin valitsin):
Function cbeDrawTintedScaledRotatedImage(img, toX#, toY#, scaleX# = 1, scaleY# = 0, angle# = 0) If scaleY = 0 Then scaleY = scaleX cbeDrawTintedScaledRotatedImageBox(img, 0, 0, ImageWidth(img), ImageHeight(img), toX, toY, scaleX, scaleY, angle) EndFunction
Meinasin ehdottaa vielä läpinäkyvyyttä, mutta mokoma toimiikin jo asettamalla piirtovärin cbeColorilla :D
Nyt kun ei ole tarvetta esilaskea käännettyjä ja skaalattuja kuvia, voisi näiden piirtämiseen olla omat funktionsa. Osittain päällekkäinen teksturoitujen kolmioiden kanssa (teksturoiduilla kolmioilla voidaan piirtää kuvia käännettynä ja skaalattuna).
DrawImageTransform(Img, rotation, scale)