трапеция

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

трапеция

Сообщение alexmckey » 08.11.2006 (Ср) 18:22

привет всем
знает ли кто,как вписать image в равнобедренную трапецию(gdi+),
примерно так
Вложения
trap.jpg
trap.jpg (55.7 Кб) Просмотров: 155
mckey

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.11.2006 (Ср) 19:28

Это не трапеция, это перспектива...
Фактически, это вращение картинки в 3D... Можно посмотреть тут, наверное.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

Сообщение alexmckey » 09.11.2006 (Чт) 8:24

Это самая что ни на есть трапеция,
ставлю вопрос по-другому:
как с помощью gdi+ трансформировать image или texturebrush,
созданную из этого image, чтобы получить именно трапецию
(я более чем уверен , что photoshop и другие редакторы
обходятся без 3D преобразований)
mckey

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.11.2006 (Чт) 9:25

Полная страница формул есть на http://en.wikipedia.org/wiki/3D_projection
Изображение

alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

Сообщение alexmckey » 09.11.2006 (Чт) 10:14

tyomitch,а можно последовательность трансформаций матрицы
для GdipSetTextureTransform
mckey

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.11.2006 (Чт) 11:09

Нельзя, потому что это преобразование нелинейное.
Изображение

alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

Сообщение alexmckey » 09.11.2006 (Чт) 11:23

tyomitch так что же делать ,подскажи
mckey

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.11.2006 (Чт) 11:33

В принципе, через GDI+ можно построчно, высчитывая новую длину каждой строки.

Типа
Код: Выделить всё
      For i As Integer = 0 To img.Height - 1
        .DrawImage(img, New Rectangle(CInt(trap(0).X - (trap(0).X - trap(2).X) * i / img.Height), trap(0).Y + i, CInt(trap(1).X + (trap(3).X - trap(1).X) * i / img.Height) - CInt(trap(0).X - (trap(0).X - trap(2).X) * i / img.Height), 1), New Rectangle(0, i, img.Width - 1, 1), GraphicsUnit.Pixel)
      Next
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 136

    TopList