[DEVELOPMENT ENVIRONMENT]
* BUG: Image editor: Magic wand finally works as expected. git-svn-id: svn://localhost/gambas/trunk@6449 867c0c6c-44f3-4631-809d-bfa615b0a4ec
This commit is contained in:
parent
24cc2648a9
commit
30b1ea9cd9
1 changed files with 39 additions and 33 deletions
|
@ -62,13 +62,6 @@ Private $hTextSelect As CImageSelection
|
|||
|
||||
Private $sLastColor As Integer
|
||||
|
||||
Public Struct MaskSegment
|
||||
X As Integer
|
||||
Y As Integer
|
||||
X2 As Integer
|
||||
Y2 As Integer
|
||||
End Struct
|
||||
|
||||
Public Sub _new(sPath As String)
|
||||
|
||||
Me.Name = File.Name(sPath)
|
||||
|
@ -2507,18 +2500,10 @@ Public Sub GetImageInfo() As String
|
|||
|
||||
End
|
||||
|
||||
Private Sub CreateSelectionFromMask(hImage As Image) As CImageShape[]
|
||||
Fast Private Sub CreateSelectionFromMask(hImage As Image) As Polygon[]
|
||||
|
||||
Dim X, Y As Integer
|
||||
Dim CW, CB As Integer
|
||||
Dim cSegment As New Collection
|
||||
Dim aSegment As MaskSegment[]
|
||||
Dim N As Integer
|
||||
Dim hSegment As MaskSegment
|
||||
Dim aShape As New CImageShape[]
|
||||
Dim hShape As CImageShape
|
||||
Dim hOther As MaskSegment
|
||||
Dim hStart As MaskSegment
|
||||
Dim I As Integer
|
||||
Dim W As Integer
|
||||
Dim hPoly As Polygon
|
||||
|
@ -2543,37 +2528,30 @@ Private Sub CreateSelectionFromMask(hImage As Image) As CImageShape[]
|
|||
hPoly.Add(X + W, Y)
|
||||
hPoly.Add(X + W, Y + 1)
|
||||
hPoly.Add(X, Y + 1)
|
||||
'hPoly.Add(X, Y)
|
||||
aPoly = Clipper.Union(aPoly, [hPoly])
|
||||
aPoly.Add(hPoly)
|
||||
|
||||
X = I
|
||||
|
||||
Next
|
||||
Next
|
||||
|
||||
aPoly = Clipper.Clean(aPoly)
|
||||
aPoly = Clipper.Simplify(aPoly, Clipper.FillWinding)
|
||||
aPoly = Clipper.Clean(aPoly)
|
||||
|
||||
For Each hPoly In aPoly
|
||||
hShape = New CImageShape
|
||||
hShape.Points = hPoly
|
||||
$hSelect.AddShape(hShape)
|
||||
Next
|
||||
Return aPoly
|
||||
|
||||
End
|
||||
|
||||
|
||||
|
||||
Fast Private Sub MagicWand()
|
||||
|
||||
Fast Private Sub CreateMask() As Image
|
||||
|
||||
Dim hMask As Image
|
||||
Dim aPoint As New Integer[]
|
||||
Dim X, X1, X2, Y, XL, XR As Integer
|
||||
Dim WW, HH As Integer
|
||||
Dim C As Integer
|
||||
Dim fTolerance As Float
|
||||
Dim I As Integer
|
||||
Dim aPoly As Polygon[]
|
||||
Dim hPoly As Polygon
|
||||
Dim hShape As CImageShape
|
||||
|
||||
WW = $hImage.W
|
||||
HH = $hImage.H
|
||||
|
@ -2583,8 +2561,6 @@ Fast Private Sub MagicWand()
|
|||
|
||||
If X < 0 Or If Y < 0 Or If X >= WW Or If Y >= HH Then Return
|
||||
|
||||
Inc Application.Busy
|
||||
|
||||
fTolerance = FImageProperty.GetTolerance() / 255
|
||||
|
||||
hMask = New Image(WW, HH, Color.White)
|
||||
|
@ -2645,7 +2621,37 @@ Fast Private Sub MagicWand()
|
|||
|
||||
Wend
|
||||
|
||||
CreateSelectionFromMask(hMask)
|
||||
Return hMask
|
||||
|
||||
End
|
||||
|
||||
|
||||
Private Sub MagicWand()
|
||||
|
||||
Dim hMask As Image
|
||||
Dim aPoint As New Integer[]
|
||||
Dim X, X1, X2, Y, XL, XR As Integer
|
||||
Dim WW, HH As Integer
|
||||
Dim C As Integer
|
||||
Dim fTolerance As Float
|
||||
Dim aPoly As Polygon[]
|
||||
Dim hPoly As Polygon
|
||||
Dim hShape As CImageShape
|
||||
|
||||
Inc Application.Busy
|
||||
|
||||
hMask = CreateMask()
|
||||
|
||||
If hMask Then
|
||||
aPoly = CreateSelectionFromMask(hMask)
|
||||
aPoly = Clipper.Simplify(aPoly, Clipper.FillWinding)
|
||||
|
||||
For Each hPoly In aPoly
|
||||
hShape = New CImageShape
|
||||
hShape.Points = hPoly
|
||||
$hSelect.AddShape(hShape)
|
||||
Next
|
||||
Endif
|
||||
|
||||
Dec Application.Busy
|
||||
|
||||
|
|
Loading…
Reference in a new issue