2008-10-17 174 views
1

我需要爲一堆jpegs(200,000+)生成thumbnails,但我想確保所有的拇指都具有相同的高度和寬度。但是,我不想更改圖像的比例,因此我需要將空白空間添加到較短的維度以「平整」。空白的背景顏色是可變的。什麼是在.NET中「平方」圖像的最佳方式?

下面是我用來生成拇指的代碼片段。平方的最佳方式是什麼?

 Dim imgDest As System.Drawing.Bitmap = New Bitmap(ScaleWidth, ScaleHeight) 
    imgDest.SetResolution(TARGET_RESOLUTION, TARGET_RESOLUTION) 
    Dim grDest As Graphics = Graphics.FromImage(imgDest) 

    grDest.DrawImage(SourceImage, 0, 0, imgDest.Width, imgDest.Height) 

回答

4

這個怎麼樣。也許你應該首先在位圖上繪製一個黑色(或任何顏色)的矩形。

然後,當您放置調整大小的圖像時,只需根據哪個維度較短,然後將該維度移動一半的差異(並將其他值保持爲0)來計算圖像的位置。

這不行嗎?

2

Vaibhav表示,首先用黑色繪製整個縮略圖區域。這將比首先將圖像裝入縮略圖然後確定要繪製黑色的哪個矩形實現pillarboxingletterboxing更簡單。對於一般的溶液,以適應一個imageWidth X imageHeight圖像分成

僞碼的thumbWidth X thumbHeight(不必是正方形)面積:

imageRatio = imageWidth/imageHeight; 
thumbRatio = thumbWidth/thumbHeight; 

zoomFactor = imageRatio >= thumbRatio 
    ? thumbWidth/imageWidth 
    : thumbHeight/imageHeight; 

destWidth = imageWidth * zoomFactor; 
destHeight = imageHeight * zoomFactor; 

drawImage(
    (thumbWidth - destWidth) >> 1, 
    (thumbHeight - destHeight) >> 1, 
    destWidth, 
    destHeight); 
相關問題