将类型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);
 }

我已经没有办法克服这些错误了。有人能告诉我一些新的见解吗?这样我就可以摆脱他们了?

将类型void转换为System.Drawing.Image

您的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