2017-03-28 145 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