2010-07-07 61 views
1

我正在使用需要320 X 240張照片的網絡攝像頭。這種類型的照片給他們一個「風景」的外觀,我需要重新調整照片的大小,以169 x 225「肖像」的照片。它的徽章計劃。無論如何,當我重新調整照片的尺寸時,由於縱橫比的差異,它們會全部縮小。有沒有辦法在同一時間重新調整圖像大小和寬高比?這是否會被視爲裁剪或調整大小?我對從哪裏開始有點困惑。我主要使用VB,但如果某人在C#中有一個很好的例子,那麼請花時間來轉換它。謝謝在.net中調整圖像和縱橫比?

回答

2

你有兩個選擇。您可以裁剪,因爲最終尺寸與原始尺寸非常接近,或者可以剪裁和調整尺寸。如果你裁剪,然後調整大小,你需要裁剪180x240以達到適當的寬高比;當您將結果重新調整爲169x225時,不會有任何失真。

這裏有一個快速鏈接,我發現來形容VB.NET裁剪:http://www.nerdydork.com/crop-an-image-bitmap-in-c-or-vbnet.html

+0

這就是我最終使用的。謝謝! – broke 2010-07-07 21:07:58

3

更改寬高比和裁剪是同樣的事情。 (基於標準的3×5照片尺寸比)

Double aspectRatio = 3.0/5.0 
Int newHeight = actualHeight ' Use full height 
Int newWidth = actualWidth * aspectRatio 

,你想一箇中心作物,所以你必須計算出像這樣:你可以計算出新的畫像尺寸,像這樣

Int cropY = 0 ' Use full height 
Int cropX = actualWidth/2.0 - newWidth/2.0 

System.Drawing中的Bitmap對象具有Clone method,它接受裁剪矩形作爲參數。 Graphics對象有一個DrawImage method,您可以使用它來同時調整圖像大小和裁剪圖像。

+0

上午我找位圖中的類或東西裁切方法?如果我只是設置高度和寬度,不會我仍然有同樣的問題? – broke 2010-07-07 19:18:38

+0

@broke回答修改 – 2010-07-07 21:08:03

+0

沒想到搞明白了,謝謝! – broke 2010-07-07 21:08:28

0

http://www.switchonthecode.com/tutorials/csharp-tutorial-image-editing-rotate

private Bitmap rotateImage(Bitmap b, float angle) 
{ 
//create a new empty bitmap to hold rotated image 
Bitmap returnBitmap = new Bitmap(b.Width, b.Height); 
//make a graphics object from the empty bitmap 
Graphics g = Graphics.FromImage(returnBitmap); 
//move rotation point to center of image 
g.TranslateTransform((float)b.Width/2, (float)b.Height/2); 
//rotate 
g.RotateTransform(angle); 
//move image back 
g.TranslateTransform(-(float)b.Width/2,-(float)b.Height/2); 
//draw passed in image onto graphics object 
g.DrawImage(b, new Point(0, 0)); 
return returnBitmap; 
}" 




private static Image resizeImage(Image imgToResize, Size size) 
{ 
int sourceWidth = imgToResize.Width; 
int sourceHeight = imgToResize.Height; 

float nPercent = 0; 
float nPercentW = 0; 
float nPercentH = 0; 

nPercentW = ((float)size.Width/(float)sourceWidth); 
nPercentH = ((float)size.Height/(float)sourceHeight); 

if (nPercentH < nPercentW) 
nPercent = nPercentH; 
else 
nPercent = nPercentW; 

int destWidth = (int)(sourceWidth * nPercent); 
int destHeight = (int)(sourceHeight * nPercent); 

Bitmap b = new Bitmap(destWidth, destHeight); 
Graphics g = Graphics.FromImage((Image)b); 
g.InterpolationMode = InterpolationMode.HighQualityBicubic; 

g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); 
g.Dispose(); 

return (Image)b; 
} 



private static Image cropImage(Image img, Rectangle cropArea) 
{ 
Bitmap bmpImage = new Bitmap(img); 
Bitmap bmpCrop = bmpImage.Clone(cropArea, 
bmpImage.PixelFormat); 
return (Image)(bmpCrop); 
}