Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET
Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 80% výuky zdarma!
birthday
Avatar
Lukáš Křehula
Redaktor
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ý
Redaktor
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
Redaktor
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
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jan Vargovský
Redaktor
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
Redaktor
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.