1

我需要为一堆 jpeg(200,000+)生成缩略图,但我想确保我所有的拇指都具有相同的高度和宽度。但是,我不想改变图像的比例,所以我需要在较短的维度上添加空白空间以“对齐”。空白区域的背景颜色是可变的。

这是我用来生成拇指的代码片段。进行平方的最佳方法是什么?

     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

2 回答 2

4

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

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

那不行吗?

于 2008-10-17T16:08:51.957 回答
2

就像Vaibhav所说,首先用黑色绘制整个缩略图区域。这比首先将图像拟合到缩略图中然后确定将哪些矩形涂黑以实现邮筒信箱更简单。

imageWidth将ximageHeight图像拟合到thumbWidthx 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);
于 2008-10-19T05:17:28.397 回答