Массив Image и расход ресурсов

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

Массив Image и расход ресурсов

Сообщение Space » 19.01.2009 (Пн) 19:33

Делаю свой бордюр окна через Image. Элемент повторения рисунка 10x8 пикселов. Есть 2 варианта:
1. Создать большой массив Image c минимальным изображением 10x8 пикселов (imgBorder(i+1).Picture=imgBorder(i).Picture)
2. Создать малый массив Image с изображением где-то 128x8 пикселов.
Какой вариант выгоднее с точки зрения расхода ресурсов? Кушает ли ресурсы часть изображения, не показанная на окне (уходящая за пределы формы, фрейма)? Выгоднее ли грузить элемент повторения в imgBorder(i) из ImageList по сравнению с вариантом imgBorder(i+1).Picture=imgBorder(i).Picture?

VBTerminator
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 415
Зарегистрирован: 19.11.2008 (Ср) 20:10

Re: Массив Image и расход ресурсов

Сообщение VBTerminator » 19.01.2009 (Пн) 19:47

Юзай Image со свойством Strech=True.

В результате картинка будет растянута на весь элемент.

В результате вместо множества элементов ты получишь 8 максимум.

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: Массив Image и расход ресурсов

Сообщение Йода » 19.01.2009 (Пн) 20:34

Space, ИМХО оба варианта кривые. Не делай бордюр окна через Image.
Вся неклиентская область окна (бордюры, заголовок) рисуется в обработчике WM_NCPAINT.
GetWindowDC вернёт тебе контекст дисплея для всего окна, включая неклиентскую область.

Space писал(а): Элемент повторения рисунка 10x8 пикселов.

Создай логическую кисть из твоего рисунка. Для этого есть функции CreatePatternBrush, CreateDIBPatternBrushPt

Есть простенький пример, он на дельфях, но я думаю общий принцип будет понятен: http://delphi-faq.zoxt.net/394.htm
Если что-то не получится - пиши, как пытался сделать и что не понятно. Постараюсь помочь.
Sub or Function not defined

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Массив Image и расход ресурсов

Сообщение Space » 19.01.2009 (Пн) 21:26

а если у меня один элемент повторения занимает часть заголовка окна, другой - другую часть, плюс ещё один центральный элемент - и всё на 1 полосе? Как тогда?

Йода
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 99
Зарегистрирован: 06.01.2008 (Вс) 21:04
Откуда: Московская область

Re: Массив Image и расход ресурсов

Сообщение Йода » 19.01.2009 (Пн) 21:44

Ничего не понял, давай в картинках. :D (но мне кажется, что BitBlt тебе поможет)
Sub or Function not defined

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: Массив Image и расход ресурсов

Сообщение Debugger » 19.01.2009 (Пн) 21:51

Я бы использовал StretchBlt (должен помочь). Левый и правый элементы, если они не растягиваются, как уже заметил Йода, можно заменить на BitBlt. Алгоритм такой:
1) Копируем левую картинку в координату 0,0
2) StretchBlt'им серединку в координату (Ширина_левой_картинки,0)
3) И копируем правую картинку в координату (Ширина_заголовка-ШиринаПравойКартинки,0).
Все тут прозрачно.

Space
Combo-маньяк
Combo-маньяк
 
Сообщения: 818
Зарегистрирован: 11.01.2007 (Чт) 1:19
Откуда: Украина

Re: Массив Image и расход ресурсов

Сообщение Space » 19.01.2009 (Пн) 21:53

"ш<<<<<<<<<<<<<<Х>>>>>>>>>>>>>>>>>ш", где каждый символ - элемент бордюра окна в Img (схематическое изображение)
И НЕ НАДО МНЕ НИЧЕГО РАСТЯГИВАТЬ!


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

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

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

    TopList