Teen tällä hetkellä piirto-ohjelmaa, missä käyttäjä voi piirtää erilaisilla väreillä kuvan. Olen tehnyt sen windows formsilla ja kuva piirretään paneeliin (Toolbox Panel). Olen yrittänyt saada selville miten saisin tallennettua paneelin sisällön (väreineen) erilliseen tiedostoon, jotta seuraavalla kerralla käynnistäessä sen voisi ladata paneeliin. Apu kelpaisi, koska vaikka olen tutkinut, niin en meinaa keksiä ratkaisua. :)
Sanoisin äkkiseltään että panel on väärä komponentti tuohon tarkoitukseen. Picturebox tai Image voisi olla lähempänä soveltuvaa komponenttia tuohon tarkoitukseen.
No sain kumminkin tallennettua sen lopulta .png tiedostona:
private void tallenna_Click(object sender, EventArgs e) { Image tallennus = PanelToBitmap(Panel_Paint); tallennus.Save(@"D:\harjoitukset\piirros.png", ImageFormat.Png); } private static Image PanelToBitmap(Control paneeli) { var kuva = new Bitmap(paneeli.Width, paneeli.Height); paneeli.DrawToBitmap(kuva, new Rectangle(0, 0, kuva.Width, kuva.Height)); return kuva; }
Mutta nyt ongelmana on se, että olen koonnut ohjelman niin että piirtopaneeli on koko formsin kokoinen ja sen päällä on paneeleita, joissa on nappeja (esim. värin vaihto ja viivan paksuntaminen). Eli tämä ei tallenna ollenkaan piirrosta, vaan kaiken muun mikä on sijoitettu paneelin sisälle. Ei kai se auta kun aloittaa alusta Pictureboxilla tai Imagella ja sijoittaa komponentit eri tavalla.
Sanoisin että piirsipä mille tahansa panelille, niin käyttäisin Graphics luokkaa piirtämiseen.
paneelista saa Graphics luokan irti näin:
Graphics graphics = paneeli.CreateGraphics()
Graphics:in saa bitmapiksi näin:
Bitmap bitmappi = new Bitmap(leveys, korkeus, graphics);
Tuo että et saa tallennettua piirrosta, vaan kaiken muun paneelille sijoitetun, viittaa kyllä vahvasti siihen että jotain menee vihkoon. (Toki niinkuin Grez totesi PictureBox tai Image ovat lähtökohtaisesti parempia ratkaisuja).
Itse saattaisin jakaa kontrollit ja piirtopinnan esimerkiksi SplitContainer:lla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.