“スクエア”に最適な方法は何ですか.NETの画像?
-
03-07-2019 - |
質問
サムネイル多数の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)
解決
これはどうですか。おそらく、最初にビットマップに黒(または任意の色)の長方形を描画する必要があります。
そして、サイズ変更された画像を配置するときは、短い方の寸法に基づいて画像の配置を計算し、その寸法を差の半分だけ移動します(もう一方は0のままにします)。
それは機能しませんか?
他のヒント
Vaibhav と同様に、最初にサムネイル領域全体を黒で塗りつぶします。これは、最初に画像をサムネイルに合わせてから、 pillarboxing またはレターボックス。
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);
所属していません StackOverflow