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 且不大于原始图像,要么捕获异常。
我有这样的感冒:
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 且不大于原始图像,要么捕获异常。