c#在内存中以特定大小剪切图像而不保存文件

c# cut image in specific size in memory without save file

我有这样的感冒:

 Bitmap bmp = new Bitmap(width, height);

我刚刚拍了一张window。现在我只想调整这个捕获的位图 (bmp) 的大小。 我怎样才能削减我的 bmp 例如

  RECT rt = new RECT();
        GetWindowRect(hwnd1, out rt);
        Int32 width = rt.Right - rt.Left;
        Int32 height = rt.Bottom - rt.Top;
        int leftttt = rt.Left + (width - 202);
        int width2 = rt.Right - leftttt;

//              // I want cut like this :
//
      //  in x=lefttt  y = rt.Top    Size ( width2,height)

稍后我可以通过以下方式轻松保存文件以检查我的结果:(但不会仅为检查而这样做)

    bmp.Save(@"D:\test.jpg", ImageFormat.Jpeg);

编辑: 我只想剪切而不是调整大小。 当我写代码时:

var graph = Graphics.FromImage(scren_kurwa.Image);

graph.DrawImage(bmp.Image, 10, 10, 200, 200);

我保存它只是覆盖了我的 bmp 屏幕,只是在较小的版本中进行了捕获。

我只想裁剪示例,我只想显示此屏幕宽度的 1/4 并将其保存到文件中。 (只节省 1/4 宽度而不是更多)。

编辑 2:

graph.CopyFromScreen(leftttt, rt.Top, 0, 0, new Size(width2, height), CopyPixelOperation.SourceCopy);

上面的代码只是做我想做的,但我不想再从屏幕上复制我想从之前捕获的 bmp 中复制它。

新手请耐心等待。我搜索了论坛,但找不到解决方案。 谢谢。

编辑 3 我只是按照你写的方式做了:

        Rectangle cropRect = new Rectangle(100,100,100,100);
        Bitmap bmp1 = new Bitmap(bmp1.Image);
        bmp1.Clone(cropRect, bmp.PixelFormat);


        bmp1.Save(@"D:\xdddde.jpg", ImageFormat.Jpeg);

但它不会剪切图像,只是显示与我的 bmp 相同的图像。

这应该适合你:

Bitmap cuttedImage;

using(Bitmap originalImage = new Bitmap("filePathName"))
{
   Rectangle cropRect = new Rectangle(...);

   cuttedImage = originalImage .Clone(cropRect, originalBmp.PixelFormat);
}

cuttedImage.Save("filePathName", ImageFormat.Jpeg);
cuttedImage.Dispose();

请注意,这将创建您的 Bitmap 的浅表副本。在你的情况下这似乎不是问题,但请记住这一点。

还要确保检查 MSDN documentation 异常处理。要么事先检查矩形是否大于 0 且不大于原始图像,要么捕获异常。