Обрезка формы

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

Обрезка формы

Сообщение iolaus » 24.01.2005 (Пн) 7:15

Есть форма на ней лежит picturebox (BGPic) в него загружается картинка, потом я определяю где на картинки пиксели белого цвета и даляю видимую область из остальных пикселей, но процесс этот очени медленный, так как приходится перебирать все пиксели. Может можно как сделать лучше и проще??? Чтобы видимой была только область где не белый цвет...

Вот мой код
Код: Выделить всё
Function LongToRGB(nColor As Long) As tRGB
    LongToRGB.R = nColor And &HFF&
    LongToRGB.G = (nColor And &HFF00&) / &H100&
    LongToRGB.B = (nColor And &HFF0000) / &H10000
End Function
Sub Virez(Owner As Form)
Dim Col As tRGB
Dim nach As Integer
Dim est As Byte
Dim x As Long
Dim y As Long
Dim FullRgn As Long
Dim Rgn As Long
Owner.ScaleMode = 3
FullRgn = CreateRectRgn(0, 0, Owner.Width, Owner.Height)
Rgn = CreateRectRgn(0, 0, Owner.Width, Owner.Height)
CombineRgn FullRgn, FullRgn, Rgn, RGN_DIFF
For y = 0 To Owner.BGPic.Height
    nach = 0
    For x = 0 To Owner.BGPic.Width
        Col = LongToRGB(GetPixel(Owner.BGPic.hdc, x, y))
        If Col.R = 255 And Col.G = 255 And Col.B = 255 Then
            If est = 1 Then
                Rgn = CreateRectRgn(nach, y, x, y + 1)
                CombineRgn FullRgn, FullRgn, Rgn, RGN_OR
                est = 0
            End If
            nach = x + 1
        Else
            est = 1
            If x = Owner.BGPic.Width - 1 Then
                Rgn = CreateRectRgn(nach, y, x, y + 1)
                CombineRgn FullRgn, FullRgn, Rgn, RGN_OR
            End If
        End If
    Next x
Next y
SetWindowRgn Owner.hwnd, FullRgn, True
End Sub
This message will self destruct in five seconds!!!

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

Сообщение tyomitch » 24.01.2005 (Пн) 9:30

Изображение

iolaus
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 176
Зарегистрирован: 19.03.2002 (Вт) 18:33
Откуда: Москва

Сообщение iolaus » 25.01.2005 (Вт) 9:34

Спасибо!!! только надо строку

.biHeight = ScaleY(Picture.Width, vbHimetric, vbPixels)

заменить на

.biHeight = ScaleY(Picture.Height, vbHimetric, vbPixels)
This message will self destruct in five seconds!!!

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

Сообщение tyomitch » 25.01.2005 (Вт) 12:21

Действительно :-)

Спасибо, что заметил.
Изображение


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList