Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Поворот картинки Добавлено: 21.09.07 11:45  

Автор вопроса:  Yanex | Web-сайт: Progr.Do.am | ICQ: 387761649 
Столкнулся со следующей проблемой: нужно повернуть картинку (у меня формат - ICO) на произвольный угол. Пробовал выдернуть операцию поворота из исходников SnimOK! (на моем сайте их можно скачать), но ничего не получилось. Виснет, или же выдает ошибку. Странно, в оригинале все работает...

Может, у кого есть уже готовый кусок кода, поделитесь, плиз...

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 21.09.07 12:34
я когда-то писал, ну точнее тоже какой-то готовый алгоритм юзал, но там всё вполне просто.. так вот заметил что качество картинки жудко портится. Думаю это из за неточности вычислений косинусов/синусов в числах с точкой.

Public Sub RotatePicBox(PicSource As PictureBox, PicDist As PictureBox, Angle As Double)
    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-сайт: Progr.Do.am
 Профиль | | #2
Добавлено: 21.09.07 16:25
Пасибо.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам