Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax > 2D-программирование

Ответ
 
Опции темы
Старый 17.11.2009, 18:52   #1
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Windows GUI

Вообщем потихоньку писал свой гуи до того как задумался над сменой стиля в гуи. Посмотрев на highgui 3 и разочаровавшись, я решил глянуть как это в wingui сделано. Скачал StyleBuilder распаковал msstyles файл, и все до чего я дошел это до того что в файле msstyles лежит xml настройки и папка с текстурками. Текстурка для заголовка окна например, имеет следующий вид:
Нажмите на изображение для увеличения
Название: toshow.jpg
Просмотров: 860
Размер:	30.0 Кб
ID:	8318
Где красные линии это SizingMargins(на текстурке их нет, они в xml записаны), которые отвечают за то как будет растянута картинка. Те части которые внутри этих линий, растягиваются, тайлятся и т.д., части которые находятся вне линий не трогаются. Также и с прочими гаджетами.
Собственно говоря вопрос то вот в чем: как можно растянуть/затайлить только часть картинки? Или может в данном случае можно сделать по-другомы? Я догадался только всю картинку разрезать по красным линиям, попиксельно копируя цвета через pixmap, и нужнуе части скейлить/тайлить
(Offline)
 
Ответить с цитированием
Старый 17.11.2009, 19:29   #2
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Ответ: Windows GUI

поддерживаю, волновал этот вопрос, как взять часть из картинки.
(Offline)
 
Ответить с цитированием
Старый 17.11.2009, 19:40   #3
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Windows GUI

а что в xml-ке ?? точки пересечения линий, anchor-ы ??

в этой библе ( для блица правда) есть врод такая штука...
нада посмотреть !!
(Offline)
 
Ответить с цитированием
Старый 17.11.2009, 20:06   #4
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Windows GUI

часть картинки очень легко, получаете пиксмап и копируете.
для этого служат методы Paste и Window пиксмапа.
Получается пиксмап через блокирование картинки.
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
h1dd3n (19.11.2009), Данил (17.11.2009)
Старый 17.11.2009, 20:07   #5
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Windows GUI

Нет там типа (перевожу как бы это в ini выглядело)
[WINDOW]
CAPTION.SizingMargins = 12 12 14 3
Числа я случайные подставил. Первая цифра = первая вертикальная линия отступ слева. Вторая цифра = вторая вертикальная линия, отступ справа. И т.д. Но впринципе справа, слева пофигу.
ЗЫ сейчас попробовал побольше картинок загрузить, вообщем попиксельное копирование это самый крайний вариант, ибо оно очень тормозит.

UPD спс джокер, пойду попробую +)
(Offline)
 
Ответить с цитированием
Старый 19.11.2009, 02:25   #6
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Windows GUI

Вообщем сначала долго парился с Window() методом.
Делал так:
Graphics 800,600,0

Global im1:TImage LoadImage("src.png")
Global 
im2:TImage CreateImage(50,50'кусочек который хочу скопировать
pix1:TPixmap = LockImage(im1)
pix2:TPixmap = LockImage(im2)
pix2 = pix1.Window(20,20,50,50)
UnlockImage(im2)
UnlockImage(im1)

DrawImage(im2,20,20)

Flip()

WaitKey() 
Не работало.
Потом методом тыка после
pix2 pix1.Window(20,20,50,50
поставил
im2 LoadImage(pix2
И оно заработало... Вопрос: почему если я сделаю ReadPixel например заново загружать картинку не надо, а здесь надо?
Вот впринципе работает (вроде):
Function CopyRect:TImage(im:TImagex:Inty:Intwidth:IntHeight:Int)
    
Local sPix:TPixmap LockImage(im)
    
UnlockImage(im)
    Return 
LoadImage(sPix.Window(x:Inty:Intwidth:IntHeight:Int))
End Function 
PS с Paste я вообще ниче не понял. Если накладывать один пиксмап на другой и при этом тот который накладываем выходить за границы первого
пример: Нажмите на изображение для увеличения
Название: toshow2.png
Просмотров: 896
Размер:	3.6 Кб
ID:	8325, то приложение вылетает с просьбой отправить отчет майкрософту. Если так то как можно вырезать часть картинки через paste?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Win API, windows.h Reizel C++ 4 10.01.2010 21:54
Windows :) GomZik Проекты на MidletPascal 22 09.08.2009 23:16
С++ под Windows 3.1 Alex_90 Болтовня 11 05.04.2008 15:57
Windows Vista DarkKnight Болтовня 49 26.12.2006 01:45
Темы для Windows SubZer0 Болтовня 0 26.03.2006 00:20


Часовой пояс GMT +4, время: 08:35.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com