forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=109)
-   -   Windows GUI (http://forum.boolean.name/showthread.php?t=10318)

h1dd3n 17.11.2009 18:52

Windows GUI
 
Вложений: 1
Вообщем потихоньку писал свой гуи до того как задумался над сменой стиля в гуи. Посмотрев на highgui 3 и разочаровавшись, я решил глянуть как это в wingui сделано. Скачал StyleBuilder распаковал msstyles файл, и все до чего я дошел это до того что в файле msstyles лежит xml настройки и папка с текстурками. Текстурка для заголовка окна например, имеет следующий вид:
Вложение 8318
Где красные линии это SizingMargins(на текстурке их нет, они в xml записаны), которые отвечают за то как будет растянута картинка. Те части которые внутри этих линий, растягиваются, тайлятся и т.д., части которые находятся вне линий не трогаются. Также и с прочими гаджетами.
Собственно говоря вопрос то вот в чем: как можно растянуть/затайлить только часть картинки? Или может в данном случае можно сделать по-другомы? Я догадался только всю картинку разрезать по красным линиям, попиксельно копируя цвета через pixmap, и нужнуе части скейлить/тайлить :4to:

Данил 17.11.2009 19:29

Ответ: Windows GUI
 
поддерживаю, волновал этот вопрос, как взять часть из картинки.

IGR 17.11.2009 19:40

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

в этой библе ( для блица правда) есть врод такая штука...
нада посмотреть !! :)

SBJoker 17.11.2009 20:06

Ответ: Windows GUI
 
часть картинки очень легко, получаете пиксмап и копируете.
для этого служат методы Paste и Window пиксмапа.
Получается пиксмап через блокирование картинки.

h1dd3n 17.11.2009 20:07

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

UPD спс джокер, пойду попробую +)

h1dd3n 19.11.2009 02:25

Ответ: Windows GUI
 
Вложений: 1
Вообщем сначала долго парился с Window() методом.
Делал так:
PHP код:

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() 

Не работало.
Потом методом тыка после
PHP код:

pix2 pix1.Window(20,20,50,50

поставил
PHP код:

im2 LoadImage(pix2

И оно заработало... Вопрос: почему если я сделаю ReadPixel например заново загружать картинку не надо, а здесь надо?
Вот впринципе работает (вроде):
PHP код:

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 я вообще ниче не понял. Если накладывать один пиксмап на другой и при этом тот который накладываем выходить за границы первого
пример: Вложение 8325, то приложение вылетает с просьбой отправить отчет майкрософту. Если так то как можно вырезать часть картинки через paste?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot