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が言ったように、最初にサムネイル領域全体を黒でペイントします。これは、最初に画像をサムネイルに合わせてから、ピラーボックスまたはレターボックスを実現するために黒く塗る長方形を決定するよりも簡単です。

imageWidthximageHeight画像を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 に答える