Страница: 1 |
Страница: 1 |
Вопрос: Поворот картинки
Добавлено: 21.09.07 11:45
Автор вопроса: Yanex | Web-сайт:
Столкнулся со следующей проблемой: нужно повернуть картинку (у меня формат - ICO) на произвольный угол. Пробовал выдернуть операцию поворота из исходников SnimOK! (на моем сайте их можно скачать), но ничего не получилось. Виснет, или же выдает ошибку. Странно, в оригинале все работает...
Может, у кого есть уже готовый кусок кода, поделитесь, плиз...
Ответы
Всего ответов: 2
Номер ответа: 1
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #1
Добавлено: 21.09.07 12:34
я когда-то писал, ну точнее тоже какой-то готовый алгоритм юзал, но там всё вполне просто.. так вот заметил что качество картинки жудко портится. Думаю это из за неточности вычислений косинусов/синусов в числах с точкой.
Const PI = 3.14159265358979
Dim intX As Integer, intY As Integer, intX1 As Integer, intY1 As Integer, dblX2 As Double, dblY2 As Double, _
dblX3 As Double, dblY3 As Double, dblThetaDeg As Double, dblThetaRad As Double
dblThetaDeg = Angle
dblThetaRad = dblThetaDeg * PI / 180
PicSource.ScaleMode = vbPixels
PicDist.ScaleMode = vbPixels
For intX = 0 To PicDist.ScaleWidth
intX1 = intX - PicDist.ScaleWidth \ 2
For intY = 0 To PicDist.ScaleHeight
intY1 = intY - PicDist.ScaleHeight \ 2
dblX2 = intX1 * Cos(-dblThetaRad) + intY1 * Sin(-dblThetaRad)
dblY2 = intY1 * Cos(-dblThetaRad) - intX1 * Sin(-dblThetaRad)
dblX3 = dblX2 + PicSource.ScaleWidth \ 2
dblY3 = dblY2 + PicSource.ScaleHeight \ 2
If dblX3 > 0 And dblX3 < PicSource.ScaleWidth - 1 And dblY3 > 0 And dblY3 < PicSource.ScaleHeight - 1 Then
PicDist.PSet (intX, intY), PicSource.Point(dblX3, dblY3)
End If
Next intY
Next intX
End Sub
Номер ответа: 2
Автор ответа:
Yanex
ICQ: 387761649
Вопросов: 32
Ответов: 169
Web-сайт:
Профиль | | #2
Добавлено: 21.09.07 16:25
Пасибо.