Περιορισμός σχεδίασης (Clipping). Δημιουργία μάσκας

Στο tip αυτό θα δούμε πώς μπορούμε να περιορίσουμε τη σχεδίαση σε μία περιοχή της φόρμας. Συγκεκριμένα, θα περιορίσουμε τη σχεδίαση στην περιοχή που περιβάλλεται από τα γράμματα ενός κειμένου. Κατόπιν, θα σχεδιάσουμε μία εικόνα η οποία θα περιοριστεί στην περιοχή αυτή, δίνοντας την αίσθηση ότι το κείμενο λειτουργεί ως μάσκα!

http://users.sch.gr/mouratx/VB-NET_Tips/Graphics/Images/ClippingText.gif

Για τον ορισμό της περιοχής κειμένου θα επιστρατεύσουμε την κλάση GraphicsPath, η οποία, γενικότερα, μπορεί να περιλαμβάνει συνδυασμό σχημάτων. Η ιδιότητα Clip, του αντικειμένου Graphics, δέχεται ένα αντικείμενο Region (που εδώ θα προέλθει άμεσα από το αντικείμενο GraphicsPath) και περιορίζει τη σχεδίαση στην καθορισμένη περιοχή.

 

Imports System.Drawing.Drawing2D

Protected Overrides Sub OnPaint(ByVal e As _

           System.Windows.Forms.PaintEventArgs)


MyBase.OnPaint(e)

'CLIPPING σχεδίασης ΣΕ ΚΕΙΜΕΝΟ.

'Ρύθμισε ομαλοποίηση των γραμμών σχεδίασης.
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias

'Ορισε χαρακτηριστικά κειμένου.
Dim myfont As New FontFamily("Arial")
Dim myfontStyle As FontStyle = FontStyle.Bold
Dim emSize As Integer = 160
Dim strformat As StringFormat = StringFormat.GenericDefault

'Δημιούργησε ένα μονοπάτι σχεδίασης.
Dim gPath As New GraphicsPath()

'Βάλε το κείμενο στο μονοπάτι.
Dim initPoint As New Point(20, 20)

 

Dim strText$ = "GDI+"
gPath.AddString(strText, myfont, myfontStyle,_

    emSize, initPoint, strformat)

 

'Σχεδίασε το μονοπάτι (με βάση το κείμενο)
e.Graphics.DrawPath(Pens.Red, gPath)

 

'Δημιουργία μίας περιοχής σχεδίασης (αντικείμενο Region)

με βάση το μονοπάτι.

Dim regionDraw As Region = New Region(gPath)

'Περιόρισε τη σχεδίαση εντός του μονοπατιού.
e.Graphics.Clip = regionDraw

'Σχεδίασε μία εικόνα από αρχείο.

‘Το κείμενο λειτουργεί ως μάσκα!
Dim img As Image = Image.FromFile("Sun.jpg")
e.Graphics.DrawImage(img, 50, 50)


'Καθάρισε.
gPath.Dispose()

regionDraw.Dispose()

img.Dispose()

End Sub

 

·        Χρήστος Μουρατίδης