Есть прямоугольник и есть картинка. Картинку надо вписать в прямоугольник.
Примерно вот так
Как?
MIT писал(а):Как нарисовать я знаю. Вопрос в дроугом - в математике.
Например есть прямоугольник 700х300 и картинка 1280х2670. Надо просчитать размер картинки. Руками с пол-пинка не получается, но я знаю, что в .net`е это где-то есть (пример когда-то видел, где - не помню )
Function GetAspect(pw As Long, ph As Long, nw As Long, nh As Long) As Single
Dim wr As Single, hr As Single
wr = nw / pw
hr = nh / ph
GetAspect = IIf(wr < hr, wr, hr)
Debug.Print "NW: " & GetAspect * pw & vbCrLf & "NH: " & GetAspect * ph
End Function
Private Function Scale(ByVal inImage As Image, ByVal w2 As Integer, ByVal h2 As Integer) As ...
Dim h1 As Integer = inImage.Height
Dim w1 As Integer = inImage.Width
Dim r, r1, r2 As Single
r1 = h1 / w1 : r2 = h2 / w2
If r1 > 1 Then
If r2 < 1 Then
r = h1 / h2
w2 = w1 / r
ElseIf r2 > 1 Then
If r1 > r2 Then
r = w1 / w2
h2 = h1 / r
ElseIf r1 < r2 Then
r = h1 / h2
w2 = w1 / r
'ElseIf r1 = r2 Then 'не используется, т.к. если соотношения одинаковые, то масштабировать не надо
End If
ElseIf r2 = 1 Then
w2 = w1 / (h1 / h2)
End If
ElseIf r1 < 1 Then
If r2 > 1 Then
r = w1 / w2
h2 = h1 / r
ElseIf r2 < 1 Then
If r1 > r2 Then
r = h1 / h2
w2 = w1 / r
ElseIf r1 < r2 Then
r = w1 / w2
h2 = h1 / r
'ElseIf r1 = r2 Then 'не используется, т.к. если соотношения одинаковые, то масштабировать не надо
End If
ElseIf r2 = 1 Then
h2 = h1 / (w1 / w2)
End If
ElseIf r1 = 1 Then
If r2 < 1 Then
w2 = h2
ElseIf r2 > 1 Then
h2 = w2
'ElseIf r2 = 1 Then 'не используется, т.к. масштабировать квадрат в квадрат не надо
End If
End If
End Function
Это типа новый смайлик - подмигивающийiGrok писал(а):,-)
MIT писал(а):p.s.Это типа новый смайлик - подмигивающий [/size]iGrok писал(а):,-)
MIT писал(а):Переписать-то не проблема... Вот только толку от твоей функции не очень много (имхо по данной теме)
Картинка: w300, h500. Вписать в: w100, h200.
Моя ф-ция: w=100,000002980232; h=166,66667163372
Твоя: w=60; h=100
Картинка: w1280, h2670. Вписать в: w700, h300.
Моя: w=143,82022857666; h=300,000008046627
Твоя: w=300 h=626
Rect: w=300 h=300 Pic=1024x1028>> myScale: 299x300
Rect: w=300 h=300 Pic=1024x1028>> GetAspect: 299x300
Rect: w=300 h=300 Pic=1424x1028>> myScale: 300x217
Rect: w=300 h=300 Pic=1424x1028>> GetAspect: 300x217
Rect: w=1024 h=300 Pic=1424x1028>> myScale: 416x300
Rect: w=1024 h=300 Pic=1424x1028>> GetAspect: 416x300
Rect: w=1024 h=6533 Pic=1424x1028>> myScale: 1024x739
Rect: w=1024 h=6533 Pic=1424x1028>> GetAspect: 1024x739
Rect: w=1024 h=6533 Pic=1424x1424>> myScale: 1024x1024
Rect: w=1024 h=6533 Pic=1424x1424>> GetAspect: 1024x1024
Rect: w=1424 h=1424 Pic=432x123>> myScale: 1424x405
Rect: w=1424 h=1424 Pic=432x123>> GetAspect: 1424x405
Rect: w=100 h=200 Pic=300x500>> myScale: 120x200 'вот она и ошибочка, я знал, что чувство меня не обманывает...
Rect: w=100 h=200 Pic=300x500>> GetAspect: 100x167
Rect: w=700 h=300 Pic=1280x2670>> myScale: 144x300
Rect: w=700 h=300 Pic=1280x2670>> GetAspect: 144x300
MIT писал(а):Чето ты как-то не правильно мою функцию грузил
MIT писал(а):И тем не мение, твоя функция мне больше понравилась (я и вправду не воспринял ее всерьез, т.к. с виду она ниче вроде и не делает)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 88