Как загнать пикчурбокс в RAM а потом вывести

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

Как загнать пикчурбокс в RAM а потом вывести

Сообщение uk8amk » 18.03.2009 (Ср) 17:55

Пишу редактор. Есть пикчурбокс, который необходимо быстро перерисовывать при перемещении мыши. Т.е. тогда когда добавляется новая графика. Например, юзер рисует круг, щелкает мышью и ведет туда куда надо. Круг растягивается. Если тупо перерисовывать весь кадр сначала, то очень медленно. Хочу сделать так: по щелчку запомнить рисунок пикчурбокса, в момент движения мыши к нему просто дорисовывать то что нужно. Только не знаю как загнать рисунок в RAM. Искал, но нужного примера пока не нашел. Плиз хелп.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение iGrok » 18.03.2009 (Ср) 18:22

uk8amk писал(а):Пишу редактор. Есть пикчурбокс, который необходимо быстро перерисовывать при перемещении мыши. Т.е. тогда когда добавляется новая графика. Например, юзер рисует круг, щелкает мышью и ведет туда куда надо. Круг растягивается. Если тупо перерисовывать весь кадр сначала, то очень медленно. Хочу сделать так: по щелчку запомнить рисунок пикчурбокса, в момент движения мыши к нему просто дорисовывать то что нужно. Только не знаю как загнать рисунок в RAM. Искал, но нужного примера пока не нашел. Плиз хелп.

Ну как самый простой вариант, можно вообще спрятать за границей формы ещё один пикчербокс, и копировать картинки между ними.

А как правильный вариант - читать в сторону CreateCompatibleDC, CreateCompatibleBitmap, BitBlt и иже с ним..
label:
cli
jmp label

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение uk8amk » 18.03.2009 (Ср) 19:38

Ok, думаю начнем с самого простого варианта

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4158
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение Mikle » 18.03.2009 (Ср) 19:45

Только прятать за границу формы не обязательно, просто Visible = False.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение BV » 19.03.2009 (Чт) 16:30

ХМ. ЕМНИП, в VB можно объявить переменную типа StdPicture и туда скопировать изображение.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение Penumbra » 19.03.2009 (Чт) 18:19

uk8amk писал(а):Пишу редактор. Есть пикчурбокс, который необходимо быстро перерисовывать при перемещении мыши. Т.е. тогда когда добавляется новая графика. Например, юзер рисует круг, щелкает мышью и ведет туда куда надо. Круг растягивается. Если тупо перерисовывать весь кадр сначала, то очень медленно. Хочу сделать так: по щелчку запомнить рисунок пикчурбокса, в момент движения мыши к нему просто дорисовывать то что нужно. Только не знаю как загнать рисунок в RAM. Искал, но нужного примера пока не нашел. Плиз хелп.

если рисуешь чтото типа круга, линии, квадрата то можно использовать свойство пикчурбокса DrawMode = vbNotXorPen и потом DrawMode = vbCopyPen

пример
Код: Выделить всё
...
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Picture1.DrawMode = vbNotXorPen
Picture1.Line (l1, r1)-(MousMoveX, MousMoveY), LinesColor, B
Picture1.Line (l1, r1)-(X, Y), LinesColor, B
Picture1.DrawMode = vbCopyPen
End If
MousMoveX = X
MousMoveY = Y

и ненадо перерисовывать ничиго
потом как мышку отжал закрепить так:
Код: Выделить всё
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.DrawMode = vbCopyPen
Picture1.Line (l1, r1)-(MousMoveX, MousMoveY), LinesColor, B
End Sub

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение uk8amk » 21.03.2009 (Сб) 10:28

О, это уже интересно. А то их стало слишком много: один пикчурбокс основной, один временный и еще один для хранения заднего изображения в режиме ручной трассировки.

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение uk8amk » 21.03.2009 (Сб) 10:38

Да и еще один вопрос в догонку чтоб не плодить новую тему.
Нужно ресайзить загружаемое в пикчурбокс изображение так чтобы картинка уменьшалась если она больше пикчурбокса или делалась больше если меньше пикчурбокса. Т.е. подгонять разрешение картинки под разрешение пикчурбокса. В какую сторону копать?

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение iGrok » 21.03.2009 (Сб) 11:32

uk8amk писал(а):Да и еще один вопрос в догонку чтоб не плодить новую тему.
Нужно ресайзить загружаемое в пикчурбокс изображение так чтобы картинка уменьшалась если она больше пикчурбокса или делалась больше если меньше пикчурбокса. Т.е. подгонять разрешение картинки под разрешение пикчурбокса. В какую сторону копать?

Опять же, простой вариант - загрузить её куда-нить (LoadPicture), узнать её ширину и высоту.
Потом для подгона под нужные размеры с сохранением пропорций посмотреть сюда.
После чего..Да хоть .PaintPitcure её с нужными размерами на PictureBox.
label:
cli
jmp label

uk8amk
Обычный пользователь
Обычный пользователь
 
Сообщения: 67
Зарегистрирован: 26.07.2007 (Чт) 16:52
Откуда: Tashkent

Re: Как загнать пикчурбокс в RAM а потом вывести

Сообщение uk8amk » 21.03.2009 (Сб) 13:07

спасибо за подсказку. Пойду разбираться


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 16

    TopList  
cron