Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Как удалить/обновить, то что сделала SetBitmapBits Добавлено: 17.06.06 11:49  

Автор вопроса:  PeterS
Приветствую всех!

Вывел функцией "SetBitmapBits PicScreen.Image, UBound(NewPicBits), NewPicBits(0)" картинку на PictureBox, а вот как теперь её удалить или вывести другую? Если повторно вызвать SetBitmapBits (ест. с другим массивом), то ничего не меняется!

Благодарю заранее!

Ответить

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

Номер ответа: 1
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #1
Добавлено: 17.06.06 21:58
Не знаю что ты сделал не правильно. Вот тебе код, который реально работает.
Закинь на форму два PictureBox'а и CommandButton
В один из боксов загрузи картинку. Записти прогу и нажми на баттон. При каждом нажатии яркость во вторм боксе будет уменьшаться.

Код:
_____________________________________
Private Type BITMAP
    bmType As Long
    bmWidth As Long
    bmHeight As Long
    bmWidthBytes As Long
    bmPlanes As Integer
    bmBitsPixel As Integer
    bmBits As Long
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Dim PicBits() As Byte, PicInfo As BITMAP
Dim Cnt As Long, BytesPerLine As Long
Private lt As Double
Private Sub Command1_Click()
    'Get information (such as height and width) about the picturebox
    GetObject Picture1.Image, Len(PicInfo), PicInfo
    'reallocate storage space
    BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
    ReDim PicBits(0 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
    'Copy the bitmapbits to the array
    GetBitmapBits Picture1.Image, UBound(PicBits), PicBits(0)
    'Invert the bits
    For Cnt = 1 To UBound(PicBits)
        PicBits(Cnt) = PicBits(Cnt) * lt
    Next Cnt
    'Set the bits back to the picture
    SetBitmapBits Picture2.Image, UBound(PicBits), PicBits(0)
    'refresh
    Picture2.Refresh
    lt = lt * 0.9
End Sub

Private Sub Form_Load()
    lt = 1
    Picture2.Height = Picture1.Height
    Picture2.Width = Picture1.Width
End Sub
________________________________
Надеюсь, что помог тебе.

Ответить

Номер ответа: 2
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #2
Добавлено: 19.06.06 20:10
SetBitmapBits - по-моему, плохая функция. SetDiBits лучше, так как она device indepentent.
А еще надо вызвать метод Refresh того объекта, на Image которого применяется SetDiBits

Кроме того. В мануале написано, что рисунок не должен быть выбран в контекст при вызове этой функции, по этому еще лучше - SetDiBitsToDevice.

Ответить

Страница: 1 |

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



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