将类型void转换为System.Drawing.Image
本文关键字:System Drawing Image 转换 类型 void | 更新日期: 2023-09-27 18:28:42
我遇到了一个转换错误,我希望得到一些帮助来克服。
目前,我正在尝试拍摄桌面的屏幕截图,并将其存储在一个可以传递的变量中。现在,这个代码看起来是这样的:
ScreenCapture capture = new ScreenCapture();
Image capturedImageObj= capture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);
然而,通过这样做,我得到了以下错误:
无法将类型"void"隐式转换为"System.Drawing.Image"
所以,我试着打字投下了这张照片。CaptureImage和它生成了相同的错误。我写的行是这样的:
Image capturedImageObj= (Image)capture.CaptureImage(showCursor, curSize, curPosition, startPoint, Point.Empty, bounds, _screenPath, fi);
我的CaptureImage方法如下:
public void CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension)
{
Bitmap bitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);
if (showCursor)
{
Rectangle cursorBounds = new Rectangle(curPos, curSize);
Cursors.Default.Draw(g, cursorBounds);
}
}
if (saveToClipboard)
{
Image img = (Image)bitmap;
if (OnUpdateStatus == null) return;
ProgressEventArgs args = new ProgressEventArgs(img);
OnUpdateStatus(this, args);
}
因此,看到我已经将该方法设置为无效,我对其进行了更改,使其需要这样的图像:
public Image CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension)
但随后它产生了以下错误:
需要可转换为"System.Drawing.Image"类型的对象。
这个错误指向以下代码块,第二个if语句是罪魁祸首:
if (saveToClipboard)
{
Image img = (Image)bitmap;
if (OnUpdateStatus == null) return;
ProgressEventArgs args = new ProgressEventArgs(img);
OnUpdateStatus(this, args);
}
我已经没有办法克服这些错误了。有人能告诉我一些新的见解吗?这样我就可以摆脱他们了?
您的CaptureImage
需要返回Image
,但您在if (OnUpdateStatus == null)
中返回void/nothing
。即使你在那里返回了一些图像,你仍然必须返回if
块之外的图像,否则它可能会抱怨Not all code paths return a value
。
public Image CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension)
{
Bitmap bitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);
if (showCursor)
{
Rectangle cursorBounds = new Rectangle(curPos, curSize);
Cursors.Default.Draw(g, cursorBounds);
}
}
if (saveToClipboard)
{
Image img = (Image)bitmap;
if (OnUpdateStatus == null) return bitmap;//<--- here
ProgressEventArgs args = new ProgressEventArgs(img);
OnUpdateStatus(this, args);
}
return bitmap;//<--- and here
}
您需要实际从CaptureImage方法返回一个Image。您的退货声明没有返回任何内容。
因为您的方法
public Image CaptureImage(
需要返回类型的图像,但您没有返回。代码中有2个返回点。
第1点:
if (OnUpdateStatus == null) return;
给出错误,因为你的返回类型需要是图像,而你没有返回,所以你应该像一样做
if (OnUpdateStatus == null)
return null; //or a valid image
在退出该方法之前,您需要返回图像以及
return someImage; //as the last line in your method before closing brackets