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

时间:2017-03-28 11:54:06

标签: c# bitmap cut

我有这样的感冒:

 Bitmap bmp = new Bitmap(width, height);

我只是抓住了窗户。现在我想重新调整这个捕获的位图(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屏幕,只是在较小的版本中进行捕获。

我只想切换examaple我想只显示此屏幕宽度的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一样。

1 个答案:

答案 0 :(得分:1)

这应该适合你:

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并且事先不大于原始图像或捕获异常。