C# 为什么图像是空的?

C# 为什么图像是空的?,c#,winforms,C#,Winforms,在form1构造函数中 bitmapwithclouds = new Bitmap(@"D:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\Resources\test.png"); cleanradar = new Bitmap(Properties.Resources.clean_radar_image); CloudEnteringAlert.CloudsOnly(bitmapwith

在form1构造函数中

bitmapwithclouds = new Bitmap(@"D:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\Resources\test.png");
cleanradar = new Bitmap(Properties.Resources.clean_radar_image);
CloudEnteringAlert.CloudsOnly(bitmapwithclouds, Properties.Resources.clean_radar_image);
pictureBox3.Image = CloudEnteringAlert.newbitmap;
在CloudEnteringAlert类中,我只使用了CloudsOnly方法:

public static Bitmap CloudsOnly(Bitmap bitmapwithclouds, Bitmap bitmapwithoutclouds)
        {
            tolerancenumeric = 15;
            Color backgroundColor = Color.Black; 
            int tolerance = tolerancenumeric * tolerancenumeric + tolerancenumeric * tolerancenumeric + tolerancenumeric * tolerancenumeric; 
            Bitmap newbitmap = new Bitmap(512, 512); 
            for (int x = 0; x < bitmapwithclouds.Width; x++)
            {
                for (int y = 0; y < bitmapwithclouds.Height; y++)
                {
                    Color color1 = bitmapwithclouds.GetPixel(x, y);
                    Color color2 = bitmapwithoutclouds.GetPixel(x, y);
                    Color color = Color.Black;

                    int dR = (int)color2.R - (int)color1.R;
                    int dG = (int)color2.G - (int)color1.G;
                    int dB = (int)color2.B - (int)color1.B;
                    int error = dR * dR + dG * dG + dB * dB;


                    if ((x == 479) && (y == 474))
                    {
                        color = Color.Black;
                    }

                    if (error < tolerance)
                    {

                        color = backgroundColor;

                    }
                    else
                    {

                        color = color1; 

                    }
                    newbitmap.SetPixel(x, y, color);
                }
            }
            newbitmap.Save(@"d:\test\newbitmap.jpg");
            return newbitmap;
        }

In the middle of the method im using getpixel and setpixel.
图像为空

在CloudEnteringAlert方法中,我在类的顶部添加了newbitmap作为static。 在方法CloudsOnly中,我为位图创建实例。 我还看到了保存在硬盘上的文件

public static Bitmap newbitmap;

那么,当我将它分配给picturebox3时,为什么它为空呢?

下面代码中的
newbitmap
是一个局部变量,它永远无法从该方法外部访问,更不用说从另一个类了

您最终将返回它,但调用代码像过程一样调用此函数,结果将丢失

我猜您也有一个
public CloudEnteringAlert.newbitmap
属性或字段,但它被同名的局部变量屏蔽了

public static Bitmap CloudsOnly(Bitmap bitmapwithclouds, Bitmap bitmapwithoutclouds)
{
    ...
    Bitmap newbitmap = new Bitmap(512, 512);   // local variable
    ...
    return newbitmap;
}
最短(不是最优雅)的补丁是:

public static void CloudsOnly(Bitmap bitmapwithclouds, Bitmap bitmapwithoutclouds)
{
    ...
    //Bitmap newbitmap = new Bitmap(512, 512);   // local variable
    newbitmap = new Bitmap(512, 512);            // class member 
    ...
    // return newbitmap;
}

您从未实际分配过
pictureBox3.Image
。您可以在方法中创建一个新的方法并返回它,但不使用它做任何事情。更改您的代码,以便将
newbitmap
返回到您的picturebox中

pictureBox3.Image =  CloudEnteringAlert.CloudsOnly(bitmapwithclouds,Properties.Resources.clean_radar_image);

显示整个相关代码,而不是描述它。另外,您发布的代码没有编译。请检查函数的最后一行。@JoelCoehoorn-是的,但这与调用代码不匹配。我已经在编辑了。
pictureBox3.Image =  CloudEnteringAlert.CloudsOnly(bitmapwithclouds,Properties.Resources.clean_radar_image);