【问题标题】:What's the best way to "square" an image in .NET?在 .NET 中“正方形”图像的最佳方法是什么?
【发布时间】:2010-09-17 18:51:34
【问题描述】:

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

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

     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)

【问题讨论】:

    标签: vb.net image-processing thumbnails


    【解决方案1】:

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

    然后当您放置调整大小的图像时,只需根据较短的尺寸计算图像的位置,然后将该尺寸移动差值的一半(并将另一个保持为 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);
      

      【讨论】:

        猜你喜欢
        • 2012-08-30
        • 1970-01-01
        • 2013-05-23
        • 2019-09-26
        • 2010-10-05
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多