Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: Panel ja forms ongelma

AtskaFin [12.01.2019 17:38:48]

#

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. :)

Grez [12.01.2019 19:39:58]

#

Sanoisin äkkiseltään että panel on väärä komponentti tuohon tarkoitukseen. Picturebox tai Image voisi olla lähempänä soveltuvaa komponenttia tuohon tarkoitukseen.

AtskaFin [12.01.2019 20:08:53]

#

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.

maka78 [14.01.2019 22:21:33]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta