什么是在.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表示,首先用黑色绘制整个缩略图区域。这将比首先将图像装入缩略图然后确定要绘制黑色的哪个矩形实现pillarboxing或letterboxing更简单。对于一般的溶液,以适应一个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);