IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Lukáš Křehula:30.6.2014 20:40

Zdarec, mám takovej problém s mazáním obrázků. Mám to udělané tak, že k nějaké určíté položce lze přidat 1 obrázek, který se vykreslí do panelu. Mám ale problém v tom, že když ten obrázek chci smazat a vytvořit novej, píše mi to chybu že obrázek je již používán. Jak ho lze "odpoužívat" když to řeknu takhle? :D
Díky

 
Odpovědět
30.6.2014 20:40
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Lukáš Křehula
Jan Vargovský:30.6.2014 20:42

Pošli nám kód :)

 
Nahoru Odpovědět
30.6.2014 20:42
Avatar
Lukáš Křehula:30.6.2014 20:54

Používám Image proměnnou, aby se při každém změnění nějaké položky změnil i obrázek. Ale hlavní je asi akce při zmáčknutí buttonu na přidání/editaci obrázku

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG";
    if(ofd.ShowDialog() == DialogResult.OK)
    {
        image = null;
        panel2.Invalidate();
        if (File.Exists(Vinohrad.ImageDirectory + "\\" + name + ".jpeg"))
            File.Delete(Vinohrad.ImageDirectory + "\\" + name + ".jpeg");
        Image img = Image.FromFile(ofd.FileName);
        img = ScaleImage(img, panel2.Width, panel2.Height);
        image = img;
        image.Save(Vinohrad.ImageDirectory + "\\" + name + ".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg);
        panel2.Invalidate();
    }
}

Fce ScaleImage

public static Image ScaleImage(Image image, int maxWidth, int maxHeight)
{
    var ratioX = (double)maxWidth / image.Width;
    var ratioY = (double)maxHeight / image.Height;
    var ratio = Math.Min(ratioX, ratioY);

    var newWidth = (int)(image.Width * ratio);
    var newHeight = (int)(image.Height * ratio);

    var newImage = new Bitmap(newWidth, newHeight);
    Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
    return newImage;
}

Vykreslování

            private void panel2_Paint(object sender, PaintEventArgs e)
{
    try
    {
        e.Graphics.Clear(Color.White);
        e.Graphics.DrawImage(image, 0, 0);
    }
    catch
    { }
}
Editováno 30.6.2014 20:55
 
Nahoru Odpovědět
30.6.2014 20:54
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Lukáš Křehula
Jan Vargovský:30.6.2014 20:57

Stačí uvolnit ten img. Všechno co implementuje IDisposable by mělo být v using bloku.

using(Image img = Image.FromFile(ofd.FileName))
{
   ...
}
 
Nahoru Odpovědět
30.6.2014 20:57
Avatar
Lukáš Křehula:30.6.2014 21:05

Děkuji ti mnohokrát :)))

 
Nahoru Odpovědět
30.6.2014 21:05
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 5 zpráv z 5.