BitBlt

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

BitBlt

Сообщение Мика » 29.06.2003 (Вс) 15:34

Предположем у меня есть два PictureBox' а. Мне надо вырезать кусок картинке из PictureBox1 и поместить вырезанный кусок картинке в PictureBox2. Помню что я это уже делал когда-то, а вот как не могу вспомнить. :?:

Мика
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.06.2003 (Вс) 10:27

Сообщение Мика » 29.06.2003 (Вс) 16:00

Всем спасибо до меня доперло если кому надо то

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
BitBlt Picture2.hdc, 0, 0, 100, 100, Me.hdc, 100, 100, vbSrcCopy
End Sub

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

Сообщение GSerg » 29.06.2003 (Вс) 16:31

Лучше уж picture1.paintpicture
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 03.07.2003 (Чт) 9:56

Лучше для чего? PaintPicture работает медленнее BitBlt (наверное потому, что его и использует, а перед этим пересчитывает координаты).

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 03.07.2003 (Чт) 13:17

Dagobert писал(а):Лучше для чего? PaintPicture работает медленнее BitBlt (наверное потому, что его и использует, а перед этим пересчитывает координаты).

Тогда уж лучше свою длл на c++ написать. У меня пока только PSet свой есть, но он раборает в 36 раз быстрее обычного :shock:

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 03.07.2003 (Чт) 13:37

GoGosha писал(а):
Dagobert писал(а):Лучше для чего? PaintPicture работает медленнее BitBlt (наверное потому, что его и использует, а перед этим пересчитывает координаты).

Тогда уж лучше свою длл на c++ написать. У меня пока только PSet свой есть, но он раборает в 36 раз быстрее обычного :shock:

а стандартного Windows API вам уже не хватает?
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 03.07.2003 (Чт) 13:47

Cyrax писал(а):
GoGosha писал(а):
Dagobert писал(а):Лучше для чего? PaintPicture работает медленнее BitBlt (наверное потому, что его и использует, а перед этим пересчитывает координаты).

Тогда уж лучше свою длл на c++ написать. У меня пока только PSet свой есть, но он раборает в 36 раз быстрее обычного :shock:

а стандартного Windows API вам уже не хватает?


На С гораздо больше возможностей

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

Сообщение GSerg » 04.07.2003 (Пт) 7:39

PaintPicrure медленнее потому, что он юзает не BitBlt, а StretchBlt. И если есть дефолтовый метод у объекта, то имхо нужно юзать его, а не объявлять АПИ, если только нет критической разницы в скорости работы.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 04.07.2003 (Пт) 7:57

GSerg писал(а):PaintPicrure медленнее потому, что он юзает не BitBlt, а StretchBlt. И если есть дефолтовый метод у объекта, то имхо нужно юзать его, а не объявлять АПИ, если только нет критической разницы в скорости работы.


Да и ещё одно преимущество PaintPicture: для того, чтоб нарисовать картинку её не обязательно помещать в пикчебокс(что тоже займёт время). А на С есть и это преимущество

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 07.07.2003 (Пн) 6:31

2 GSerg:
Конечно StretchBlt а не BitBlt. Что-то меня переклинило, извините.
Согласен, если не нужна особая скорость, то лучше пользоваться средствами VB. Но всё-таки каждый метод лучше для своей конкретной задачи, а говорить, что он просто лучше нельзя.

2 GoGosha:
С API картинку не обязательно грузить в PictureBox. можно и без него. Что тоже быстрее. чем в VB. (Сам замерял, только числа не помню, давно было). Собственная DLL'шка для простого рисования это хорошо, но в ней придётся всё равно использовать API, так зачем лишние движения. Вот если какие-то специфичные функции(фильтры, кисти, преобразования, и т.д.) тогда другое дело.

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 07.07.2003 (Пн) 9:50

Dagobert писал(а):С API картинку не обязательно грузить в PictureBox...


Может функцию подскажешь?

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 07.07.2003 (Пн) 9:54

Dagobert писал(а):Собственная DLL'шка для простого рисования это хорошо, но в ней придётся всё равно использовать API...


Моя DLL использовала только функцию GetObjectApi и то один раз на PictureBox т. е. рисуешь сколько хочешь а апи один раз юзаешь. Там получаешь ссылку на массив пикселей в памяти и работаешь уже с нею :shock:

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

Сообщение GSerg » 07.07.2003 (Пн) 10:20

GoGosha, тебе сюда. Там и исходник есть.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

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

    TopList