Avatar
jzvire01
Člen
Avatar
jzvire01:

Potřebuju poradit jak uložit obrázek z pictureboxu. Vytvořil jsem si vlastní malování a teď se to snažím uložit.

Image.Image.Save("soubor.png");

a hází mi to:

An unhandled exception of type 'System.NullRe­ferenceExcepti­on' occurred in WindowsFormsAp­plication10.e­xe.

Additional information: Odkaz na objekt není nastaven na instanci objektu.

 
Odpovědět 2. července 13:21
Avatar
ORRNY99
Člen
Avatar
ORRNY99:

Zkus tohle:

public void ExportToBmp(string path)
    {
        using(var bitmap = new Bitmap(pictureBox.Width, pictureBox.Height))
        {
        pictureBox.DrawToBitmap(bitmap, pictureBox.ClientRectangle);
        ImageFormat imageFormat = null;

        var extension = Path.GetExtension(path);
        switch (extension)
        {
            case ".bmp":
                imageFormat = ImageFormat.Bmp;
                break;
            case ".png":
                imageFormat = ImageFormat.Png;
                break;
            case ".jpeg":
            case ".jpg":
                imageFormat = ImageFormat.Jpeg;
                break;
            case ".gif":
                imageFormat = ImageFormat.Gif;
                break;
            default:
                throw new NotSupportedException("File extension is not supported");
        }

        bitmap.Save(path, imageFormat);
        }
    }

nebo lehčí varianta:

pictureBox1.Image.Save(@"C:\Users\HP\Pictures\test.jpg",ImageFormat.Jpeg);
 
Nahoru Odpovědět 2. července 13:50
Avatar
jzvire01
Člen
Avatar
jzvire01:

Ani jedno nefunguje dávám sem celý kód:

Graphics g;
        Point ep = new Point(0, 0);
        Point sp = new Point(0, 0);
        Pen myPen = new Pen(Color.Black, 5);
        bool k = false;
        TextBox txt = new TextBox();
        Image File;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            sp = e.Location;

            if (e.Button == MouseButtons.Left)
            {
                k = true;
            }
        }



        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            k = false;

        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (k == true)
            {
                ep = e.Location;
                g = Image.CreateGraphics();
                g.DrawLine(myPen, sp, ep);
            }
            sp = ep;

        }

        private void pictureBox9_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox9.BackColor;
            pictureBox1.BackColor = pictureBox9.BackColor;
        }

        private void pictureBox10_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox10.BackColor;
            pictureBox1.BackColor = pictureBox10.BackColor;
        }

        private void pictureBox6_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox6.BackColor;
            pictureBox1.BackColor = pictureBox6.BackColor;
        }

        private void pictureBox7_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox7.BackColor;
            pictureBox1.BackColor = pictureBox7.BackColor;
        }

        private void pictureBox8_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox8.BackColor;
            pictureBox1.BackColor = pictureBox8.BackColor;
        }

        private void pictureBox5_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox5.BackColor;
            pictureBox1.BackColor = pictureBox5.BackColor;
        }

        private void pictureBox4_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox4.BackColor;
            pictureBox1.BackColor = pictureBox4.BackColor;
        }

        private void pictureBox3_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox3.BackColor;
            pictureBox1.BackColor = pictureBox3.BackColor;
        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox2.BackColor;
            pictureBox1.BackColor = pictureBox2.BackColor;
        }

        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            myPen.Width = float.Parse(numericUpDown1.Value.ToString());
        }

        private void pictureBox13_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox13.BackColor;
            pictureBox1.BackColor = pictureBox13.BackColor;
        }

        private void pictureBox11_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox11.BackColor;
            pictureBox1.BackColor = pictureBox11.BackColor;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            g.Clear(Color.White);
        }

        private void pictureBox16_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox16.BackColor;
            pictureBox1.BackColor = pictureBox16.BackColor;
        }

        private void pictureBox15_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox15.BackColor;
            pictureBox1.BackColor = pictureBox15.BackColor;
        }

        private void pictureBox14_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox14.BackColor;
            pictureBox1.BackColor = pictureBox14.BackColor;
        }

        private void pictureBox12_Click(object sender, EventArgs e)
        {
            myPen.Color = pictureBox12.BackColor;
            pictureBox1.BackColor = pictureBox12.BackColor;
        }

        private void button2_Click(object sender, EventArgs e)
        {

            ExportToBmp("soubor");
        }
        public void ExportToBmp(string path)
        {
            using (var bitmap = new Bitmap(Image.Width, Image.Height))
            {
                Image.DrawToBitmap(bitmap, Image.ClientRectangle);
                ImageFormat imageFormat = null;

                var extension = Path.GetExtension(path);
                switch (extension)
                {
                    case ".bmp":
                        imageFormat = ImageFormat.Bmp;
                        break;
                    case ".png":
                        imageFormat = ImageFormat.Png;
                        break;
                    case ".jpeg":
                    case ".jpg":
                        imageFormat = ImageFormat.Jpeg;
                        break;
                    case ".gif":
                        imageFormat = ImageFormat.Gif;
                        break;
                    default:
                        throw new NotSupportedException("File extension is not supported");
                }

                bitmap.Save(path, imageFormat);

            }
        }
 
Nahoru Odpovědět 2. července 14:38
Avatar
jzvire01
Člen
Avatar
Odpovídá na jzvire01
jzvire01:

Omlouvám se. Jde to, ale nic to neuloží.

 
Nahoru Odpovědět 2. července 14:44
Avatar
jzvire01
Člen
Avatar
Odpovídá na ORRNY99
jzvire01:

Jde to, ale uloží to jenom bílou plochu

Editováno 2. července 14:49
 
Nahoru Odpovědět 2. července 14:46
Avatar
Odpovídá na jzvire01
Michael Škrášek:

Problém asi bude v tom, že kreslýš na Graphics, pictureBox1.Image vrací obrázek pozadí, na kterém nic není.
Lepší způsob bude kreslit na obrázek a ten pak vykreslovat na picturebox ...

Udělal bych to nějak takto:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Graphics gr = Graphics.FromImage(bmp);
    // kreslení na obrázek ...


    e.Graphics.DrawImage(bmp, 0, 0);
}

private void Form1_Load(object sender, EventArgs e)
{
    bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
}

private void Save(string path)
{
    bmp.Save(path);
}
Nahoru Odpovědět 2. července 14:52
Proč to dělat složitě, když to jde jednoduše.
Avatar
jzvire01
Člen
Avatar
 
Nahoru Odpovědět 2. července 14:58
Avatar
ORRNY99
Člen
Avatar
ORRNY99:

Zkus ještě tohle to by mělo už fungovat:

public static byte[] ImageToByte(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

private void button2_Click(object sender, EventArgs e)
{

        System.Drawing.Image currentImage = null;


        var bin = (byte[]) (ImageToByte(AlbumArt.Image));
        currentImage = Image.FromStream(new MemoryStream(bin));

        using (Image image1 = Image.FromStream(new MemoryStream(bin)))
        {
            image1.Save("output.jpg", ImageFormat.Jpeg);
        }

}
Editováno 2. července 15:28
 
Nahoru Odpovědět 2. července 15:26
Avatar
ORRNY99
Člen
Avatar
ORRNY99:

vlastně stačí jenom tohle

using (Image image1 = Image.FromStream(new MemoryStream(ImageToByte(AlbumArt.Image))))
{
                   image1.Save("output.jpg", ImageFormat.Jpeg);
}
 
Nahoru Odpovědět 2. července 15:33
Avatar
Odpovídá na jzvire01
Michael Škrášek:

Funguje to ... jen se to kreslí na černé pozadí ... přidej:

private void Form1_Load(object sender, EventArgs e)
{
    bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
    Graphics gr = Graphics.FromImage(bmp);
    gr.Clear(pictureBox1.BackColor);
}
Nahoru Odpovědět 2. července 15:34
Proč to dělat složitě, když to jde jednoduše.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.