方法错误地返回图像对象c#.Net

方法错误地返回图像对象c#.Net,.net,image,methods,.net,Image,Methods,我有一个问题,我得到了一个方法,采取一个图像对象,处理它到一个颜色通道(其他2个是纯黑色),然后返回一个新的图像从进程 现在的问题是,当我在方法中创建新图像,并且在调试过程中查看对象时,图像对象看起来非常好。但是,当我将其返回到空图像对象时,该图像对象内的属性都显示“System.ArgumentException” 以下是该方法的代码: public Image GetRedImage(Image sourceImage) { using (Bitmap bmp

我有一个问题,我得到了一个方法,采取一个图像对象,处理它到一个颜色通道(其他2个是纯黑色),然后返回一个新的图像从进程

现在的问题是,当我在方法中创建新图像,并且在调试过程中查看对象时,图像对象看起来非常好。但是,当我将其返回到空图像对象时,该图像对象内的属性都显示“System.ArgumentException”

以下是该方法的代码:

    public Image GetRedImage(Image sourceImage)
    {
        using (Bitmap bmp = new Bitmap(sourceImage))
        using (Bitmap redBmp = new Bitmap(sourceImage.Width, sourceImage.Height))
        {
            for (int x = 0; x < bmp.Width; x++)
            {
                for (int y = 0; y < bmp.Height; y++)
                {
                    Color pxl = bmp.GetPixel(x, y);
                    Color redPxl = Color.FromArgb((int)pxl.R, 1, 1);

                    redBmp.SetPixel(x, y, redPxl);
                }
            }
            Image tout = (Image)redBmp;

            return tout;
        }

    }
public Image GetRedImage(Image sourceImage)
{
使用(位图bmp=新位图(源图像))
使用(位图redBmp=新位图(sourceImage.Width、sourceImage.Height))
{
对于(int x=0;x
有人知道到底发生了什么吗


非常感谢。

redBmp将由您的使用块处理,tout将redBmp转换为图像类型。删除redBmp的使用块


Menno

redBmp将由您的使用块处理,tout将redBmp转换为图像类型。删除redBmp的使用块


Menno

您已经使用
语句将
redBmp
包装在
中,以便在方法退出时调用它的
Dispose
方法。如果您打算在方法之外使用它(您已将其转换为
图像并返回它),则不应处理它

public Image GetRedImage(Image sourceImage)
{
    Bitmap redBmp = null;
    using (Bitmap bmp = new Bitmap(sourceImage))
    {
        redBmp = new Bitmap(sourceImage.Width, sourceImage.Height);
        for (int x = 0; x < bmp.Width; x++)
        {
            for (int y = 0; y < bmp.Height; y++)
            {
                Color pxl = bmp.GetPixel(x, y);
                Color redPxl = Color.FromArgb((int)pxl.R, 1, 1);

                redBmp.SetPixel(x, y, redPxl);
            }
        }
    }

    return redBmp as Image;
}
public Image GetRedImage(Image sourceImage)
{
位图redBmp=null;
使用(位图bmp=新位图(源图像))
{
redBmp=新位图(sourceImage.Width、sourceImage.Height);
对于(int x=0;x
您已使用
语句将
redBmp
包装在
中,以便在方法退出时调用该方法。如果您打算在方法之外使用它(您已将其转换为
图像并返回它),则不应处理它

public Image GetRedImage(Image sourceImage)
{
    Bitmap redBmp = null;
    using (Bitmap bmp = new Bitmap(sourceImage))
    {
        redBmp = new Bitmap(sourceImage.Width, sourceImage.Height);
        for (int x = 0; x < bmp.Width; x++)
        {
            for (int y = 0; y < bmp.Height; y++)
            {
                Color pxl = bmp.GetPixel(x, y);
                Color redPxl = Color.FromArgb((int)pxl.R, 1, 1);

                redBmp.SetPixel(x, y, redPxl);
            }
        }
    }

    return redBmp as Image;
}
public Image GetRedImage(Image sourceImage)
{
位图redBmp=null;
使用(位图bmp=新位图(源图像))
{
redBmp=新位图(sourceImage.Width、sourceImage.Height);
对于(int x=0;x
通过使用
使用
块,您将在离开使用范围后立即处理图像

尝试从顶部替换这两行:

using (Bitmap bmp = new Bitmap(sourceImage))
using (Bitmap redBmp = new Bitmap(sourceImage.Width, sourceImage.Height))
与:

现在它应该可以工作了,取决于您的程序逻辑,您必须在之后手动处理这些图像


您可能还可以使用
bmp
对象处置
redBmp
对象,但肯定不能,因为您基本上是在返回它,所以您可以克隆它并返回一个克隆,或者不处置它,或者返回已处理的不可用对象,就像现在发生的情况一样。

通过使用
using
块,您在离开使用范围后立即处理图像

尝试从顶部替换这两行:

using (Bitmap bmp = new Bitmap(sourceImage))
using (Bitmap redBmp = new Bitmap(sourceImage.Width, sourceImage.Height))
与:

现在它应该可以工作了,取决于您的程序逻辑,您必须在之后手动处理这些图像


您可能还可以使用
bmp
对象处置
redBmp
对象,但肯定不能,因为您基本上是在返回它,所以您可以克隆它并返回一个克隆,或者不处置它,或者像现在这样返回一个已处置的不可用对象。

咧嘴笑着感谢大家的帮助(尤其是对Davide)它现在正确地返回许多很多的感谢然后投票回答并且接受一个你认为最好的;微笑着感谢你的帮助(尤其是对Davide),现在它正确地返回了许多很多的感谢,然后投票回答并接受你认为最好的一个;