Tarkoitus olisi tehdä ohjelmalleni graafinen ulkoasu ja ajattelin päästä helpoimmalla siten, että piirrän photarilla vain kaksi isoa kuvaa koko ulkoasusta. Toinen normaalitilassa ja toinen esittämään nappien värejä kun niitä on painettu.
Mutta miten onnistuu VB.NET:illä moisen toteutus? Nappien luonnin helpottamiseksi asettelisin esim. piilotettuja planeja / nappeja tms. formiin ja käyttäisin niiden koordinaatteja kuvan klikkausalueen tunnistukseen, sekä "nappi pohjassa" -kuvan oikean osan näyttämiseen?
No eikö kukaan osaa auttaa :(
Drawimagellahan tuo pitäisi onnistua mutta mulla ainakin kusee se siten, että jos kopioin osan toisesta kuvasta toiseen kuvaan, skaalautuu kopioitu pala todella pieneksi.
Antamassasi linkissä:
g.DrawImage(bmp, dstRect, srcRect, GraphicsUnit.Pixel)
Tuolla pitäisi kyllä onnistua koko homma. Jos skaalautuu pieneksi niin muuta dstRect aluetta suuremmaksi.
Juu siis kuten sanoin, PITÄISI tuolla onnistua. Mutta vaikka määritän esim. kohdekuvan paikan (.location) jonkun toisen kuvan mukaan, ei se koskaan täysin siihen haluttuun paikkaan asetu.
Eli siis, mulla on isohko kuva, jonka päälle oon piirtäny planen, jota käytän halutun osan kopioinnin määrittämiseen (clientrectangle ja location käskyt). Sitte mulla on toinen isohko kuva jonka päällä vastaavasti plane (samankokoinen plane kuin lähteessä). Tätä siis käytän kohdepaikan määrittämiseen graafisesti.
No se ei kuitenkaan mene koskaan sinne minne pitäis, ja jos menee niin skaalautuu pieneksi.
Täällä ei ilmeisesti ketään kiinnosta aloittelijoita auttaa vai oliko tämä nyt tosiaan niin paha rasti?
Miks se pitäis tehdä noin hankalasti? Tuhat kertaa helpompaa tehdä jokaiselle napille omat kuvat.
Siksi että tällä tavoin saadaan tiettyjä helpotuksia grafiikoiden luomiseen ja muokkaamiseen erityisesti jos rakennetaan jonkinlainen skinieditori.
+
Koska nappini ovat läpikuultavia png kuvia ja haluan niiden päälle transparentit labelit, joutudun vaihtamaan labelien parentin kuvaan. Tällöin, jos kuva on koko formin kokoinen, säilyy desing tilassa asetetut koordinaatit oikeina, mutta jos teen tämän erikseen jokaiselle pienelle kuvalle, joudun sumplimaan koordinaatit uudestaan.
EDIT:
Tuo labelien sijainti onnistuikin PointTo- komennoilla:
Dim p As Point p = Label1.PointToScreen(Label1.Location) Label1.Parent = PictureBox3 Label1.Location = Label1.PointToClient(p)
Voi olla että tossa pitäisi olla .parent mukana myös, eli:
Dim p As Point p = Label1.parent.PointToScreen(Label1.Location) Label1.Parent = PictureBox3 Label1.Location = Label1.parent.PointToClient(p)
Joo muistelen että VB:ssä käytettiin erilaista mittayksikköä jonka pystyi kai vaihtamaan formin propertiesistä
Niin meinasit että se kuvien venyminen kopioitaessa johtuu siitä? Täytyypä tarkistaa asia. Graphicsunitti on ollu pixeleiks asetettuna tos kopioinnis.
Aihe on jo aika vanha, joten et voi enää vastata siihen.