什么是在.NET中“平方”图像的最佳方式?

问题描述:

我需要为一堆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) 

这个怎么样。也许你应该首先在位图上绘制一个黑色(或任何颜色)的矩形。

然后,当您放置调整大小的图像时,只需根据哪个维度较短,然后将该维度移动一半的差异(并将其他值保持为0)来计算图像的位置。

这不行吗?

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);