IOException未处理

时间:2012-02-12 17:08:54

标签: c# ioexception

我有一个应用程序可以裁剪图像并将其保存 过程是加载图像,裁剪图像,删除原始图像(所以我可以替换它),然后保存它 这是我的代码:

private void DetectSize(object sender, EventArgs e)  
{  
int x = 1;  
Bitmap TempImage = new Bitmap(@cwd + "\\t" + (x + 1) + ".jpg", true);  
        pictureBox.Image = (Image)TempImage.Clone();  
        TempImage.Dispose();  
        Bitmap imgPart = new Bitmap(pictureBox.Image);  
        int imgHeight = imgPart.Height;  
        int imgWidth = imgPart.Width;  
        HalfWidth = imgWidth / 2;  
        MaxWidth = imgWidth;  
        try  
        {  
            Bitmap imgPart1 = new Bitmap(pictureBox.Image);  
            Color c;  
            for (int i = 0; i < imgPart1.Width; i++)  
            {  
                for (int j = 0; j < imgPart1.Height; j++)  
                {  
                    c = imgPart1.GetPixel(i, j);  
                    string cn = c.Name;  
                    for (int z = 0; z <= 9; z++)  
                    {  
                        if (z < 10)  
                        {  
                            if (cn == "ff00000" + z)  
                            {  
                                if (i < HalfWidth)  
                                {  
                                    MinWidth = i;  
                                }  
                                else  
                                {  
                                    if (i < MaxWidth)  
                                    {  
                                        MaxWidth = i;  
                                    }  
                                }  
                            }  
                        }  
                        else  
                        {  
                            if (cn == "ff0000" + z)   
                            {  
                                if (i < HalfWidth)  
                                {  
                                    MinWidth = i;  
                                }  
                                else  
                                {    
                                    if (i < MaxWidth)  
                                    {  
                                        MaxWidth = i;  
                                    }  
                                }  
                            }  
                        } 
                    }  
                }  
            }  
            MinWidth += 1;  
            MaxWidth -= 1;  
            MaxWidth = imgWidth - MaxWidth;  
            imgPart1.Dispose();  
            imgPart.Dispose();  
            lblLeftMargin.Text = Convert.ToString(MinWidth);  
            lblRightMargin.Text = Convert.ToString(MaxWidth);  

        }  
        catch (Exception ex) { MessageBox.Show(ex.Message); }  
        }  
    }  

这用于定位将用于裁剪图像的边距。

private void CropSave(object sender, EventArgs e)
    {
        int x = 1;
        Bitmap croppedBitmap = new Bitmap(pictureBox.Image);

        croppedBitmap = croppedBitmap.Clone(
        new Rectangle(
            MinWidth, 0,
            (int)croppedBitmap.Width - MinWidth - MaxWidth,
            1323),
        System.Drawing.Imaging.PixelFormat.DontCare);

        if (System.IO.File.Exists(@cwd + "\\t" + (x + 1) + ".jpg"))
            System.IO.File.Delete(@cwd + "\\t" + (x + 1) + ".jpg");

        croppedBitmap.Save(@cwd + "\\t" + (x + 1) + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

        croppedBitmap.Dispose();
        MessageBox.Show("File " + (x + 1) + "Done Cropping");
    }  

这是用于裁剪和保存图像

错误显示在第System.IO.File.Delete(@cwd + "\\t" + (x + 1) + ".jpg"

它说

  

该进程无法访问文件'C:\ Users .... \ t2.jpg',因为它正由另一个进程使用。

我试着看几天我错了,但仍然没有 请帮我。

1 个答案:

答案 0 :(得分:4)

    Bitmap TempImage = new Bitmap(@cwd + "\\t" + (x + 1) + ".jpg", true);  
    pictureBox.Image = (Image)TempImage.Clone();  
    TempImage.Dispose();  

Clone()方法没有按照您希望的方式执行。它仍然保持对文件的锁定,内存映射文件对象在两个图像对象之间共享。处理第一个只关闭对象上的一个句柄,pictureBox.Image对象仍然打开另一个句柄。这样写它:

    pictureBox.Image = new Bitmap(TempImage);