Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Vyplňování texturou

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Vyplňování texturou

Autor: Luboš

22:14:14 25.03.2011

Nějak jsem přehlédl funkci CreateBrushIndirect. Pomocí této funkce je vše velice jednoduché, viz. přiložený příklad.

Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush As LOGBRUSH) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long
Private Type LOGBRUSH
lbStyle As Long
lbColor As Long
lbHatch As Long
End Type
Private Const BS_PATTERN = 3
Private Const FLOODFILLBORDER = 0

Private Sub Command1_Click()
Dim hBrush As Long
Dim hOld As Long
Dim r As Long
Dim xxx As LOGBRUSH
xxx.lbColor = 0
xxx.lbHatch = Picture1.Image
xxx.lbStyle = BS_PATTERN
'Vytvoříme vzor výplně
hBrush = CreateBrushIndirect(xxx)
'nastavíme novou výplň pro formulář
hOld = SelectObject(Me.hdc, hBrush)
'Na formulář namalujeme trojúhelník
Line (20, 20)-(200, 80)
Line (200, 80)-(160, 240)
Line (160, 240)-(20, 20)
'Vyplníme trojúhelník výplní
r = ExtFloodFill(Form1.hdc, 160, 200, 0, FLOODFILLBORDER)
'zrušíme novou výplň a nastavíme výplň původní
DeleteObject SelectObject(Me.hdc, hOld)
End Sub

Private Sub Form_Load()
'Nastavíme vlastnosti pictureboxu pro výplň
Picture1.Visible = False
Picture1.AutoSize = True
Picture1.Picture = LoadPicture(App.Path & "\vzorek.jpg")
End Sub

Citovat příspěvek

 

Re: Vyplňování texturou

Autor: Luboš

16:14:21 20.03.2011

Pokud by vám jako výplň postačila bitmapa velikosti 8*8 bodů, tak je nastavení velice jednoduché. Pro větší velikost bitmapy budete muset použít výše zmíněnou funkci CreateDIBPatternBrush nebo CreateDIBPatternBrushPt.

příklad pro bitmapu 8*8 bodů:

Dim hBrush As Long
Dim hOld As Long
Dim r As Long

'Nastavíme vlastnosti formuláře
Form1.ScaleMode = vbPixels
Form1.AutoRedraw = True

'Nastavíme vlastnosti pictureboxu pro výplň
Picture1.Visible = False
Picture1.ScaleMode = vbPixels
Picture1.BackColor = RGB(255, 255, 255)
Picture1.BorderStyle = 0
Picture1.Width = 8
Picture1.Height = 8
Picture1.AutoRedraw = True

'Namalujeme do výplně kolečko
Picture1.Circle (3, 3), 3

'Vytvoříme vzor výplně
hBrush = CreatePatternBrush(Picture1.Image)

'nastavíme novou výplň pro formulář
hOld = SelectObject(Form1.hdc, hBrush)

'Na formulář namalujeme trojúhelník
Line (20, 20)-(200, 80)
Line (200, 80)-(160, 240)
Line (160, 240)-(20, 20)

'Vyplníme trojúhelník výplní
r = ExtFloodFill(Form1.hdc, 160, 200, RGB(0, 0, 0), FLOODFILLBORDER)

'zrušíme novou výplň a nastavíme výplň původní
DeleteObject SelectObject(Form1.hdc, hOld)

Citovat příspěvek

 

Re: Vyplňování texturou

Autor: Luboš

3:12:55 20.03.2011

Podle mně by mohlo pomoci nastavení výplně pomocí funkce CreateDIBPatternBrush nebo CreateDIBPatternBrushPt.

Citovat příspěvek

 

Re: Vyplňování texturou

Autor: honyk

19:37:43 15.03.2011

Funkce PaintPicture (neumí ale pracovat s JPEG nebo PNG):
http://msdn.microsoft.com/en-us/library/aa244140%28v=vs.60%29.aspx

Citovat příspěvek

 

Vyplňování texturou

Autor: Prisko

22:20:00 14.03.2011

Zdravím Vás.
Mám prosbičku: rád bych si vyplnil obyčejný form(okno), kde už je něco vykresleno, texturou( barevnou :)). Funkce API FloodFill ani extFloodFill asi nepoužívá texturu ( nebo ji umí nějak použít?) a dělit prostor okna na regiony podle toho, co tam je vykresleno se mi zdá dost náročné( hlavně časově). Prosím poraďte mi, jak na to.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: