C#位图类为字段?
问题描述:
我试图让这个类处理图像,我希望它有一个位图字段和一个构造函数,它允许我提供位图的路径,以便其他方法可以使用该位图。所以,我希望它能够做到这一点:C#位图类为字段?
ImageProcessing image = new ImageProcessing("D:\\image.bmp");
int time_of_processing = image.grayscale();
image.SaveTo("D:\\image2.bmp");
所以这是我的代码:
public class ImageProcessing
{
Bitmap image;
public ImageProcessing(string path)
{
image = new Bitmap(path);
}
public int Grayscale()
{
Stopwatch time = new Stopwatch();
time.Start();
for (int x = 0; x < image.Width; x++)
{
for (int y = 0; y < image.Height; y++)
{
Color pixelColor = image.GetPixel(x, y);
int grayScale = (int)((pixelColor.R * 0.21) + (pixelColor.G * 0.72) + (pixelColor.B * 0.07));
Color newColor = Color.FromArgb(grayScale, grayScale, grayScale);
image.SetPixel(x, y, newColor);
}
}
time.Stop();
TimeSpan ts = time.Elapsed;
int milliseconds = ts.Milliseconds + (ts.Seconds * 1000);
return milliseconds;
}
public void SaveTo(string path)
{
image.Save(path);
}
}
当我有这个,Visual Studio中告诉我,图像将始终为NULL。构造函数应该如何查找它的工作?
答
当您使用它来确保它始终使用正确的类时,将名称空间添加到ImageProcessing类。下面的代码(主要是原始代码)已经过测试和工作(它会对列出的图像进行灰度化)。
namespace WindowsFormsApplication10
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string path1 = @"C:\work\test.bmp";
string path2 = @"C:\work\test2.bmp";
WindowsFormsApplication10.ImageProcessing image = new WindowsFormsApplication10.ImageProcessing(path1);
int time_of_processing = image.Grayscale();
image.SaveTo(path2);
}
}
public class ImageProcessing
{
Bitmap image;
public ImageProcessing(string path)
{
image = new Bitmap(path);
}
public int Grayscale()
{
Stopwatch time = new Stopwatch();
time.Start();
for (int x = 0; x < image.Width; x++)
{
for (int y = 0; y < image.Height; y++)
{
Color pixelColor = image.GetPixel(x, y);
int grayScale = (int)((pixelColor.R * 0.21) + (pixelColor.G * 0.72) + (pixelColor.B * 0.07));
Color newColor = Color.FromArgb(grayScale, grayScale, grayScale);
image.SetPixel(x, y, newColor);
}
}
time.Stop();
TimeSpan ts = time.Elapsed;
int milliseconds = ts.Milliseconds + (ts.Seconds * 1000);
return milliseconds;
}
public void SaveTo(string path)
{
image.Save(path);
}
}
}
对于初学者,表明实际产生你所谈论的......错误消息的实际代码;) – elgonzo
既然你有位图作为你应该收集垃圾的申请中的一个,我会建议实施在ImageProcessing类上使用Idisposable并在其周围使用Use。 – loneshark99
此代码不会产生您正在谈论的错误。这可能是VS中的一个小故障。尝试做一个干净的重建,或重新启动VS?唯一的错误是,你还没有大写调用灰度() – David