1

画像のサイズを特定のサイズに変更しようとしていますが、選択したサイズよりも小さい場合は、画像をまったく引き伸ばしたくありません。代わりに、使用されていない画像領域の周りに黒い背景を追加したいと考えています。

これを行う最も簡単な方法は、目的の寸法の新しい画像を作成し、背景色を設定してから、この背景の上に画像を追加して中央に配置することだと思います。

以下を使用してビットマップを作成しました。

Dim bmp As New Drawing.Bitmap(500, 500)
Dim grap As Drawing.Graphics = Drawing.Graphics.FromImage(bmp)
grap.Clear(Drawing.Color.Black)

この時点から、プロセスを完了する方法について少し迷いました。必要なのは、ビットマップと中央に画像を追加することだけです。

どんなアイデアでも大歓迎です

4

3 に答える 3

2

私はこれをテストしていませんが、あなたが望むものをほとんど手に入れたように見えますが、

grap.Clear(Drawing.Color.Black)

グラフィック全体を確実に黒に戻します。

画像を描画する前にクリアを試してください:

Graphics pic = this.CreateGraphics();
pic.Clear(Color.Black);
pic.DrawImage(img, new Point(center));
于 2012-09-16T20:24:46.670 に答える
1

使用して終了しました:

' Load Image
Dim FilePath As String = "testimage.jpg"
Dim OriginalImage As New Bitmap(FilePath)

' Resize Image While Maintaining Aspect Ratio
Dim aspectRatio As Double
Dim newHeight As Integer
Dim newWidth As Integer
Dim maxWidth As Integer = 500
Dim maxHeight As Integer = 500

' Calculate Size
If OriginalImage.Width > maxWidth Or OriginalImage.Height > maxHeight Then
    If OriginalImage.Width >= OriginalImage.Height Then ' image is wider than tall
        newWidth = maxWidth
        aspectRatio = OriginalImage.Width / maxWidth
        newHeight = CInt(OriginalImage.Height / aspectRatio)
    Else ' image is taller than wide
        newHeight = maxHeight
        aspectRatio = OriginalImage.Height / maxHeight
        newWidth = CInt(OriginalImage.Width / aspectRatio)
    End If
Else ' if image is not larger than max then increase size
    If OriginalImage.Width > OriginalImage.Height Then
        newWidth = maxWidth
        aspectRatio = OriginalImage.Width / maxWidth
        newHeight = CInt(OriginalImage.Height / aspectRatio)
    Else
        newHeight = maxHeight
        aspectRatio = OriginalImage.Height / maxHeight
        newWidth = CInt(OriginalImage.Width / aspectRatio)
    End If

    ' Below keeps original height & width instead of resizing to fit new height / width
    ' newWidth = OriginalImage.Width
    ' newHeight = OriginalImage.Height
End If

Dim newImg As New Bitmap(OriginalImage, CInt(newWidth), CInt(newHeight)) '' blank canvas
' Create New Bitmap
Dim bmp As New Drawing.Bitmap(500, 500)
Dim grap As Drawing.Graphics = Drawing.Graphics.FromImage(bmp)
grap.Clear(Drawing.Color.Black)
Dim g As Graphics = Graphics.FromImage(bmp)

' Calculate Points To Insert Resized Image
Dim InsertX As Integer
Dim InsertY As Integer

' Calculate Y Axis Point
If newImg.Height >= 500 Then
    InsertY = 0
Else
    InsertY = CInt(((500 - newImg.Height) / 2))
End If

' Calculate X Axis Point
If newImg.Width >= 500 Then
    InsertX = 0
Else
    InsertX = CInt(((500 - newImg.Width) / 2))
End If

' Add Resized Image To Canvas
g.DrawImage(newImg, New Point(InsertX, InsertY))
于 2012-09-17T12:10:12.900 に答える
0

大きい方の軸の比率だけを使用すると、他の比率が他の軸を超えなければならない状況で失敗する可能性があります。つまり、1400x1000 ->(300x200 に収まるようにしたい) -> しかし、1400/300 の比率 (4.6) だけでは、結果は 300x214 になります。両方の比率をチェックして、大きい方を続けると便利だと思います

于 2015-10-17T21:19:42.020 に答える