Рисование в VB библиотекой на Си

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

Рисование в VB библиотекой на Си

Сообщение Arcanoid » 01.01.2005 (Сб) 15:49

С Наступившим!.. (а кого-то ещё только с Наступающим)

Вопросец такой:

Программа на VB6 использует ф-ию из собст..но-ручно написанной DLL на VC++6.
Как сделать так, чтобы из этой самой DLL рисовать с помощью GDI в VB-шном PictureBox-е (при AutoRedraw-е этого box-а = TRUE)? А точнее сказать, как и какие нужно передавать аргументы функции в DLL, какие параметры PictureBox-а использовать...

Например, мне надо нарисовать прямоугольник в невидимой части PictureBox-а, шобы потом, когда эта часть станет видимой нарисованный прямоуг-к тоже был виден.

Приведите пожалуйста пример кода, кто знает как это сделать...
Заранее спасибо!

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

Сообщение GSerg » 01.01.2005 (Сб) 16:03

А чё так извращённо? Почему не сразу рисовать в VB?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 01.01.2005 (Сб) 16:04

А зачем через DLL?? :( :) Можно через стандартные фун-ции! :P

Код: Выделить всё
Picture1.Line (1, 1) - (10, 10), b(bf)


b-это просто прямоуголбник
bf-закрашеннфй прямоугольник
:wink:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.01.2005 (Сб) 16:10

Ну вот надо так человеку, значит...

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 01.01.2005 (Сб) 16:34

Более простой способ будет более медленным.

Мне нужно попиксельно обабатывать изображение, как массив байтов, а чтение/запись всего изображения методами Point и Pset растянется ... сами наверное знаете на сколько !! ))).

Ну или как в таком случае в Vb получить прямой доступ к диб-секции PictureBox-а или stdpicure?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.01.2005 (Сб) 17:01

API-Guide писал(а):The GetBitmapBits function copies the bitmap bits of a specified bitmap into a buffer.


Код: Выделить всё
'Create a new project, add a command button and a picture box to the project, load a picture into the picture box.
'Paste this code into Form1
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 Sub Command1_Click()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    '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(1 To BytesPerLine * PicInfo.bmHeight * 3) As Byte
    'Copy the bitmapbits to the array
    GetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
    'Invert the bits
    For Cnt = 1 To UBound(PicBits)
        PicBits(Cnt) = 255 - PicBits(Cnt)
    Next Cnt
    'Set the bits back to the picture
    SetBitmapBits Picture1.Image, UBound(PicBits), PicBits(1)
    'refresh
    Picture1.Refresh
End Sub

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

Re: Рисование в VB библиотекой на Си

Сообщение tyomitch » 01.01.2005 (Сб) 20:08

Arcanoid писал(а):Как сделать так, чтобы из этой самой DLL рисовать с помощью GDI в VB-шном PictureBox-е (при AutoRedraw-е этого box-а = TRUE)? А точнее сказать, как и какие нужно передавать аргументы функции в DLL, какие параметры PictureBox-а использовать...

Просто передавать Picture.hDC должно быть достаточно.
Но вполне согласен, что при прямой работе с пикселами на VB скорость, скорее всего, будет не хуже.
Изображение

_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 01.01.2005 (Сб) 23:29

Ну тогда

SetPixel
GetPixel
:roll:
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!

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

Сообщение tyomitch » 02.01.2005 (Вс) 16:45

_Мика_ писал(а):Ну тогда

SetPixel
GetPixel
:roll:
Да зачем они? Скопировать картинку в массив байт, и работать с ними напрямую...
Изображение

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 03.01.2005 (Пн) 22:44

Благодарю всех за помощь!


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

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

Сейчас этот форум просматривают: PetalBot и гости: 31

    TopList