2017-03-28 101 views
2

我已经colde这样的:C#剪切图像不保存文件

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

你检查了这些问题[缩放System.Drawing.Bitmap到给定的大小,同时保持纵横比](http://stackoverflow.com/questions/10442269/scaling-a-system-drawing-bitmap-to- a-given-size-while-maintain-aspect-ratio)和[Resize Image](http://stackoverflow.com/questions/10839358/resize-bitmap-image)? –

+1

[将System.Drawing.Bitmap缩放到给定大小并保持长宽比]的可能副本(http://stackoverflow.com/questions/10442269/scaling-a-system-drawing-bitmap-to-a-given-大小,而保持长宽比) –

+0

没有重复,他们显示如何调整大小,我只想要一个新的BMP文件(刀) – Michael

回答

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

+0

我刚刚编辑主题看。 – Michael

+0

矩形太大我也意味着'越界'。即使你的矩形小于图像,如果你指定一个区域超出原始图像的范围,你也会得到'OutOfMemory'异常。例如。:在100x100的图像上,如果你想要从(45,40)到(100,100)的矩形,你需要做'新的矩形(45,40,55,90)'。因为:width =图像宽度-x =(100-45 = 55),height =图像高度-y =(100-40 = 60)。 '新的Rectangle(45,40,100,100)'会给你一个'OutOfMemory'异常:矩形放置在(45,40)到(145,140) - >大于你的图像! – Jurjen

+0

是的男人谢谢我知道我刚刚测试我现在知道我们的记忆。但看看我的主要编辑只是我写了编辑3 – Michael