Принудительное изображение фиксированного размера

Все изображения, которые мы загружаем или создаем, имеют разные размеры, в которых большую часть времени они не будут вписываться в создаваемое приложение. Есть ли способ заставить изображение появиться, например, размером A4?

По моему конкретному вопросу, Это все окно приложения, но картинка распространяется и далее внизу, поэтому я хочу скорее установить границы, заставляя ее изменять размер до 60% экрана.

Вот как я называю изображение

Dim cm As New customImageOverlay(mainMap.Position)
cm.MarkerImage = New Bitmap(My.Resources.ground_floor_plan)
' before I make it appear to the map I want to do something like this
' cm.size = form.clientrectagle - 40% - just something in my mind..
 objects.Markers.Add(cm)
' this is at form load event, I am just adding the image as an overlay
' so there are no pictureboxes
1 ответ

Вам может потребоваться рассчитать, насколько вы хотите, чтобы изображение было, а затем создать его миниатюру:

Friend Function GetImageThumb(ByVal orgBmp As BitMap, 
 ByVal w as Int32, h as Int32) As Bitmap

 Dim thumb As New Bitmap(w, h)

 Using g As Graphics = Graphics.FromImage(thumb)
 g.DrawImage(orgBmp , 0, 0, w + 1, h + 1)
 End Using
 Return thumb
End Function

Более важным может быть масштабирование. Выясните, хотите ли вы изменить размер на основе ширины или высоты, а затем вычислить новый размер на основе этого.

' get new Height Scaled from a set Width:
 Friend Function ScaledHeight(ByVal w As Integer, orgSize as Size) As Integer
 Dim scale As Single = CSng(orgSize.Height / orgSize.Width)
 Return CInt(w * scale)
 End Function

 ' get new Width scaled from the Height:
 Friend Function ScaledWidth(ByVal h As Integer, orgSize as Size) As Integer
 Dim scale As Single = CSng(orgSize.Width / orgSize.Height )
 Return CInt(h * scale)
 End Function

Посмотрите на необработанное изображение, определите новый размер, который вы хотите, а затем определите размер большого пальца, масштабируя либо ширину, либо высоту (как правило, Height, для меня), а затем создайте миниатюру, используя этот новый размер.

РЕДАКТИРОВАТЬ

На самом деле это не "исправлено", если все изображения, которые вы хотите отобразить, имеют одинаковые размеры, что обычно не так. Масштабирование особенно важно, когда экран имеет другое соотношение сторон (W: H), чем изображение.

Для 60% -ного выбора экрана (псевдокода, вам придется кое-что поделать):

Dim bmp as Bitmap = New Bitmap(My.Resources.ground_floor_plan)

 Dim orgSize As Size = bmp.Size

 ' scale to 60% of width
 Dim newWidth As Integer = (thisForm.Width * .6)
 ' maybe:
 'Dim newWidth As Integer = (My.Computer.Screen.WorkingArea.Width * .6)
 Dim newWidth As Int32 = ScaledHeight(newWidth, orgSize )

 Dim thumb as Bitmap = GetImageThumb(bmp, newWidth, newHeight)

 cm.MarkerImage = thumb
 objects.Markers.Add(cm)
 bmp.Dispose

licensed under cc by-sa 3.0 with attribution.