Re: ColorMask BMP Mask Builder
- From: "Philip S. Rist" <prist@xxxxxxxxxxxx>
- Date: Mon, 5 Sep 2005 19:52:22 -0400
This is Form1.frm
cut
here ---------------------------------------------------------------------
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Begin VB.Form Form1
Caption = "STS\ColorMask Mask Generator"
ClientHeight = 7980
ClientLeft = 165
ClientTop = 735
ClientWidth = 9060
LinkTopic = "Form1"
ScaleHeight = 7980
ScaleWidth = 9060
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton SaveBtn
Caption = "&Save"
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 120
TabIndex = 18
Top = 7080
Width = 1095
End
Begin VB.TextBox Red1
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 4320
TabIndex = 14
Top = 7080
Width = 615
End
Begin VB.TextBox Green1
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 5280
TabIndex = 13
Top = 7080
Width = 615
End
Begin VB.TextBox Blue1
BeginProperty Font
Name = "MS Sans Serif"
Size = 9.75
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 6240
TabIndex = 12
Top = 7080
Width = 615
End
Begin VB.TextBox Text1
Height = 375
Left = 7200
Locked = -1 'True
TabIndex = 11
TabStop = 0 'False
Top = 7080
Width = 1695
End
Begin VB.PictureBox ColorDisplay
BorderStyle = 0 'None
Height = 4335
Left = 4320
ScaleHeight = 4335
ScaleWidth = 4695
TabIndex = 10
Top = 2280
Width = 4695
End
Begin VB.TextBox ColorCount
Height = 375
Left = 7080
TabIndex = 9
Top = 1080
Width = 1095
End
Begin VB.PictureBox Pic1
AutoSize = -1 'True
BorderStyle = 0 'None
Height = 1695
Left = 120
ScaleHeight = 113
ScaleMode = 3 'Pixel
ScaleWidth = 137
TabIndex = 4
Top = 4920
Width = 2055
End
Begin VB.PictureBox Pic2
AutoRedraw = -1 'True
AutoSize = -1 'True
BorderStyle = 0 'None
Height = 1815
Left = 2160
ScaleHeight = 121
ScaleMode = 3 'Pixel
ScaleWidth = 137
TabIndex = 3
TabStop = 0 'False
Top = 4920
Width = 2055
End
Begin VB.TextBox NewPrefix
Height = 375
Left = 2880
TabIndex = 2
Top = 600
Width = 5295
End
Begin VB.TextBox MsgText
Height = 375
Left = 2880
Locked = -1 'True
TabIndex = 1
Top = 120
Width = 5295
End
Begin MSComDlg.CommonDialog CD
Left = 8520
Top = 240
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin VB.CommandButton SelectBtn
Caption = "&Select"
BeginProperty Font
Name = "MS Sans Serif"
Size = 12
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 375
Left = 120
TabIndex = 0
Top = 120
Width = 1215
End
Begin VB.Label Label12
Caption = "3. Select color to mask"
Height = 255
Left = 120
TabIndex = 23
Top = 1680
Width = 3495
End
Begin VB.Label Label11
Caption = "4. Save mask to file"
Height = 255
Left = 120
TabIndex = 22
Top = 6720
Width = 2775
End
Begin VB.Label Label10
Caption = "Colors:"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 6000
TabIndex = 21
Top = 1080
Width = 975
End
Begin VB.Label Label9
Caption = "Target:"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 2160
TabIndex = 20
Top = 600
Width = 735
End
Begin VB.Label Label4
Caption = "Source:"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 2160
TabIndex = 19
Top = 120
Width = 735
End
Begin VB.Label Label1
Caption = "&Red"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 4320
TabIndex = 17
Top = 6840
Width = 855
End
Begin VB.Label Label2
Caption = "&Green"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 5280
TabIndex = 16
Top = 6840
Width = 855
End
Begin VB.Label Label3
Caption = "&Blue"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 6240
TabIndex = 15
Top = 6840
Width = 855
End
Begin VB.Image Image1
Height = 2295
Left = 120
Stretch = -1 'True
Top = 2280
Width = 2055
End
Begin VB.Image Image2
Height = 2295
Left = 2160
Stretch = -1 'True
Top = 2280
Width = 2055
End
Begin VB.Label Label5
Caption = "Source Image"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 120
TabIndex = 8
Top = 2040
Width = 1935
End
Begin VB.Label Label6
Caption = "New Image"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 2160
TabIndex = 7
Top = 2040
Width = 2175
End
Begin VB.Label Label7
Caption = "Source (Actual Size)"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 120
TabIndex = 6
Top = 4680
Width = 2055
End
Begin VB.Label Label8
Caption = "New Image (Actual Size)"
BeginProperty Font
Name = "MS Sans Serif"
Size = 8.25
Charset = 0
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 2160
TabIndex = 5
Top = 4680
Width = 2295
End
Begin VB.Menu mnuFile
Caption = "&File"
Begin VB.Menu mnuFileExit
Caption = "E&xit"
End
End
Begin VB.Menu mnuHelp
Caption = "&Help"
Begin VB.Menu mnuHelpAbout
Caption = "&About"
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'------------------------------------------------------------------------
' Module : Form1
' DateTime : 8/29/05 14:04
' Author : Philip S. Rist
' E-mail : prist@xxxxxxxxxxxx
' Web site : http://www.innernet.net/prist
' Purpose : Test methods for creating mask bitmaps
'------------------------------------------------------------------------
' Copyright 2005 by St. Thomas Software - All rights reserved
'------------------------------------------------------------------------
' This product is used at your own risk. St.Thomas Software does not
' guarantee that this software does anything. Though it usually does
' something.
'
' This software is freeware. It may be used for amy moral purpose.
' If you feel you need to pay for this product, please send one million
' dollars or whatever you feel is appropriate to
'
' International Rescue Committee
' 122 East 42nd Street
' New York, NY 10168-1289
'------------------------------------------------------------------------
Option Explicit
Dim mfilesys As Scripting.FileSystemObject
Dim mColors As Scripting.Dictionary
Dim mColorArray(255) As Long
Dim mRows As Long
Dim mColumns As Long
Dim mFileName As String
Dim mFilePath As String
Dim mSourcePath As String
Dim mTargetPath As String
Dim mFileExtension As String
Dim mCurrentRow As Long
Dim mCurrentColumn As Long
Dim mCurrentColor As Long
'
'------------------------------------------------------------------
' Procedure : mnuFileExit_Click 8/29/05 14:04
' Purpose : Exit program
'------------------------------------------------------------------
Private Sub mnuFileExit_Click()
Unload Me
End Sub
'
'------------------------------------------------------------------
' Procedure : mnuHelpAbout_Click 8/29/05 16:19
' Purpose : Display About form
'<comment>
'
'</comment>
'------------------------------------------------------------------
Private Sub mnuHelpAbout_Click()
frmAbout.Show
End Sub
'
'------------------------------------------------------------------
' Procedure : SaveBtn_Click 8/29/05 14:04
' Purpose : Save mask to file
'------------------------------------------------------------------
Private Sub SaveBtn_Click()
Dim lCount As Long
Dim lFileName As String
Dim lExtension As String
On Error Resume Next
lFileName = NewPrefix.Text
lCount = InStrRev(lFileName, "\")
If lCount > 0 Then
SaveSetting "STS", "GradGen", "Target Directory", Left$(lFileName,
lCount)
End If
lExtension = UCase$(mFileExtension)
If lExtension <> ".BMP" _
And lExtension <> ".ICO" _
And lExtension <> ".CUR" Then
lExtension = ".BMP"
End If
If Len(lFileName) > 0 Then
lFileName = lFileName & lExtension
SavePicture Pic2.Image, lFileName
End If
End Sub
'
'------------------------------------------------------------------
' Procedure : GetColor 8/29/05 14:04
' Purpose : Display standard color dialog
'------------------------------------------------------------------
'
'Private Sub GetColor(pRed As Long, pGreen As Long, pBlue As Long)
'Dim lColor As Long
'
' With CD
' .Color = RGB(pRed Mod 256, pGreen Mod 256, pBlue Mod 256)
' .DialogTitle = "Color Search"
'
' .ShowColor
'
' lColor = .Color
' pRed = lColor Mod 256
' lColor = lColor \ 256
' pGreen = lColor Mod 256
' lColor = lColor \ 256
' pBlue = lColor Mod 256
' End With
'
'End Sub
'------------------------------------------------------------------
' Procedure : ColorDisplay_MouseDown 8/29/05 14:10
' Purpose : Build mask for selected color
'------------------------------------------------------------------
Private Sub ColorDisplay_MouseDown(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Dim lColor As Long
Dim lRed As Long
Dim lGreen As Long
Dim lBlue As Long
Dim lHeight As Single
Dim lWidth As Single
lHeight = CSng(ColorDisplay.ScaleHeight)
mCurrentRow = mRows * Y / lHeight - 0.5
lWidth = CSng(ColorDisplay.ScaleWidth)
mCurrentColumn = mColumns * X / lWidth - 0.5
lColor = mCurrentColumn * mRows + mCurrentRow
lColor = mColorArray(lColor)
mCurrentColor = lColor
GetRGB lColor, lRed, lGreen, lBlue
SetColor1 lRed, lGreen, lBlue
BuildMask lColor
End Sub
'
'------------------------------------------------------------------
' Procedure : BuildMask 8/29/05 14:04
' Purpose : Build mask for selected color
'------------------------------------------------------------------
Public Sub BuildMask(pColor As Long)
Dim lX As Single
Dim lY As Single
Dim lWhite As Long
Dim lBlack As Long
Screen.MousePointer = vbHourglass
Pic2.Picture = Pic1.Image
lBlack = RGB(0, 0, 0)
lWhite = RGB(255, 255, 255)
For lY = 0 To Pic1.ScaleHeight
For lX = 0 To Pic1.ScaleWidth
If Pic1.Point(lX, lY) = pColor Then
Pic2.PSet (lX, lY), lWhite
Else
Pic2.PSet (lX, lY), lBlack
End If
Next
Next
SaveBtn.Visible = True
Image2.Picture = Pic2.Image
Screen.MousePointer = vbNormal
Me.Refresh
End Sub
'
'------------------------------------------------------------------
' Procedure : GetRGB 8/29/05 14:04
' Purpose : Extract color component values from color
'------------------------------------------------------------------
Private Sub GetRGB(pColor As Long, pRed As Long, pGreen As Long, pBlue As
Long)
Dim lColor As Long
lColor = lColor And &HFFFFFF
pRed = pColor Mod 256
lColor = pColor \ 256
pGreen = lColor Mod 256
lColor = lColor \ 256
pBlue = lColor Mod 256
End Sub
'
'------------------------------------------------------------------
' Procedure : SetColor1 8/29/05 14:04
' Purpose : Displays selected color and its components
'------------------------------------------------------------------
Private Sub SetColor1(pRed As Long, pGreen As Long, pBlue As Long)
Text1.BackColor = RGB(pRed, pGreen, pBlue)
Red1.Text = CStr(pRed)
Green1.Text = CStr(pGreen)
Blue1.Text = CStr(pBlue)
End Sub
'
'------------------------------------------------------------------
' Procedure : Form_Paint 8/29/05 14:04
' Purpose : Repaint form, selects rows and columns for color pallette
'------------------------------------------------------------------
Private Sub Form_Paint()
Dim lCount As Long
Dim lColors As Long
If Len(mSourcePath) > 0 Then
lCount = Val(ColorCount.Text)
If lCount > 0 Then
If lCount < 9 Then
DisplayColors 8, 1
lColors = 8
ElseIf lCount < 17 Then
DisplayColors 8, 2
lColors = 16
ElseIf lCount < 33 Then
DisplayColors 8, 4
lColors = 32
ElseIf lCount < 65 Then
DisplayColors 8, 8
lColors = 64
ElseIf lCount < 129 Then
DisplayColors 16, 8
lColors = 128
ElseIf lCount < 257 Then
DisplayColors 16, 16
lColors = 256
Else
End If
End If
End If
End Sub
'
'------------------------------------------------------------------
' Procedure : Image1_MouseDown 8/24/05 08:13
' Purpose : Build mask for selected color
'------------------------------------------------------------------
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
Dim h As Single
Dim w As Single
Dim lColor As Long
Dim lRed As Long
Dim lGreen As Long
Dim lBlue As Long
w = Image1.Width
h = Image1.Height
w = X / w
h = Y / h
w = w * Pic1.ScaleWidth
h = h * Pic1.ScaleHeight
lColor = Pic1.Point(w, h)
mCurrentColor = lColor
GetRGB lColor, lRed, lGreen, lBlue
SetColor1 lRed, lGreen, lBlue
BuildMask lColor
End Sub
'
'------------------------------------------------------------------
' Procedure : Pic1_MouseDown 8/29/05 14:05
' Purpose : Build mask for selected color
'------------------------------------------------------------------
Private Sub Pic1_MouseDown(Button As Integer, Shift As Integer, X As Single,
Y As Single)
Dim lColor As Long
Dim lRed As Long
Dim lGreen As Long
Dim lBlue As Long
lColor = Pic1.Point(X, Y)
mCurrentColor = lColor
GetRGB lColor, lRed, lGreen, lBlue
SetColor1 lRed, lGreen, lBlue
BuildMask lColor
End Sub
'
'------------------------------------------------------------------
' Procedure : Form_Load 8/29/05 14:05
' Purpose : Initialize form
'------------------------------------------------------------------
Private Sub Form_Load()
Set mfilesys = New Scripting.FileSystemObject
Set mColors = New Scripting.Dictionary
SaveBtn.Visible = False
End Sub
'
'------------------------------------------------------------------
' Procedure : SelectBtn_Click 8/24/05 08:12
' Purpose : Allows user to select a source image
'------------------------------------------------------------------
Private Sub SelectBtn_Click()
Dim lPos As Long
Dim lX As Single
Dim lY As Single
Dim lColor As Long
Dim lColorName As String
Dim lColorCount As Long
On Error GoTo selecterr
With Form1.CD
.CancelError = True
.DefaultExt = ".bmp"
.DialogTitle = "Select Source Image File"
.Filter = "Bitmap Image File
(*.bmp;*.ico;*.cur)|*.bmp;*.ico;*.cur|Grapgic Files
(*.gif;*.jpg;*.jpe;*.jpeg)|*.gif;*.jpg;*.jpe;*.jpeg|All Files (*.*)|*.*"
.FilterIndex = 1
lPos = InStrRev(mSourcePath, "\")
If lPos > 0 Then
.InitDir = Left$(mSourcePath, lPos - 1)
Else
.InitDir = GetSetting("STS", "GradGen", "Source Directory",
"c:\temp")
End If
.ShowOpen
If Len(.FileName) > 0 Then
If mfilesys.FileExists(.FileName) Then
Screen.MousePointer = vbHourglass
mFileName = .FileName
mSourcePath = mFileName
SaveSetting "STS", "GradGen", "Source Directory", mSourcePath
MsgText.Text = mFileName
Me.Caption = "STS\ColorMask Mask Generator - Mask for " &
mFileName
Pic1.Picture = LoadPicture(mFileName)
Image1.Picture = LoadPicture(mFileName)
Image2.Picture = LoadPicture(mFileName)
Pic2.Picture = LoadPicture(mFileName)
lPos = InStrRev(mFileName, "\")
If lPos > 0 Then
mFilePath = Left$(mFileName, lPos)
mFileName = Mid$(mFileName, lPos + 1)
ElseIf Mid$(mFileName, 2) = ":" Then
mFilePath = Left$(mFileName, 2) & "\"
mFileName = Mid$(mFileName, 3)
End If
lPos = InStrRev(mFileName, ".")
If lPos > 0 Then
mFileExtension = Mid$(mFileName, lPos)
mFileName = Left$(mFileName, lPos - 1)
End If
mTargetPath = GetSetting("STS", "GradGen", "Target Directory",
vbNullString)
If Len(mTargetPath) = 0 Then
mTargetPath = mFilePath
End If
NewPrefix.Text = mTargetPath & mFileName
mColors.RemoveAll
For lY = 0 To Pic1.ScaleHeight
For lX = 0 To Pic1.ScaleWidth
lColor = Pic1.Point(lX, lY)
If lColor >= 0 Then
lColorName = "C" & CStr(lColor)
If Not mColors.Exists(lColorName) Then
mColors.Add lColorName, CStr(lColor)
mColorArray(lColorCount) = lColor
lColorCount = lColorCount + 1
End If
If lColorCount > 255 Then
Exit For
End If
End If
Next
If lColorCount > 255 Then
Exit For
End If
Next
ColorCount.Text = CStr(lColorCount)
Screen.MousePointer = vbNormal
End If
End If
End With
selecterr:
End Sub
'
'------------------------------------------------------------------
' Procedure : DisplayColors 8/29/05 14:05
' Purpose : Display color pallette
'------------------------------------------------------------------
Private Sub DisplayColors(pRows As Long, pColumns As Long)
Dim lCount As Long
Dim lTop As Long
Dim lHeight As Long
Dim lBottom As Long
Dim lMiddle As Long
Dim lLeft As Long
Dim lRight As Long
Dim lWidth As Long
Dim lInc As Single
Dim lR As Long
Dim lG As Long
Dim lB As Long
Dim lColor As Long
Dim lColorVar As Variant
Dim lKey As String
mRows = pRows
mColumns = pColumns
lInc = pRows * pColumns - 1
On Error Resume Next
With ColorDisplay
.Refresh
lHeight = ColorDisplay.Height \ pRows
lTop = 0
lLeft = 0
lWidth = ColorDisplay.Width \ pColumns
lRight = 0
ColorDisplay.DrawWidth = 2
ColorDisplay.ForeColor = RGB(255, 255, 255)
lCount = 0
For Each lColorVar In mColors
lCount = lCount + 1
lKey = CStr(lColorVar)
If mColors.Exists(lKey) Then
lColor = mColors.Item(lKey)
Else
lColor = RGB(0, 0, 0)
End If
If (lCount Mod pRows) <> 1 Then
lBottom = lTop + lHeight
Else
lTop = 0
lBottom = lHeight
lLeft = lRight
lRight = lRight + lWidth
End If
GetRGB lColor, lR, lG, lB
If lR + lG + lB > 384 Then
ColorDisplay.ForeColor = RGB(0, 0, 0)
Else
ColorDisplay.ForeColor = RGB(255, 255, 255)
End If
If lInc < 16 Then
lMiddle = (lRight + lLeft) \ 2
ColorDisplay.Line (lLeft, lTop)-(lMiddle, lBottom), lColor, BF
lColor = Val(Mid$(lKey, 2))
ColorDisplay.Line (lMiddle, lTop)-(lRight, lBottom), lColor, BF
Else
ColorDisplay.Line (lLeft, lTop)-(lRight, lBottom), lColor, BF
End If
If pRows < 32 Then
ColorDisplay.Line (lLeft, lTop)-(lRight, lBottom), RGB(0, 0, 0),
B
.CurrentX = lLeft
.CurrentY = lTop
ColorDisplay.Print CStr(lR) & "x" & CStr(lG) & "x" & CStr(lB)
End If
lTop = lBottom
Next
End With
End Sub
cut
here ---------------------------------------------------------------------
"Philip S. Rist" <prist@xxxxxxxxxxxx> wrote in message
news:dfi360026gk@xxxxxxxxxxxxxxxxxxxxx
> This is a simple VB6 program I put together this week. It scans a
> bitmap image for a selected color. It creates a second image
> containing containing black rgb(0,0,0) at ech pixel that did not
> match the selected color and white, rgb(255,255,255) at each pixel that
> did match.
>
> Since this program works on a pixel by pixel basis it can be very slow on
> large images. It should be used only on small image files. The source
will
> be posted as replays to this message. The program consists of two forms
and
> the project file. You should be able to fill in anything that may be
> missing.
>
> This program seems to work ok on my system. I have not tried testing it
on
> any other systems. There still may some problems. Give it a try. You
have
> the source. You can always change it to do what you want. Send all
> comments to Philip S. Rist at prist@xxxxxxxxxxxxx
>
> '------------------------------------------------------------------------
> ' Module : STS\ColorMask
> ' DateTime : 8/24/05 08:16
> ' Author : Philip S. Rist
> ' E-mail : prist@xxxxxxxxxxxx
> ' Web site : http://www.innernet.net/prist
> '
> '------------------------------------------------------------------------
> ' Copyright 2005 by St. Thomas Software - All rights reserved
> '------------------------------------------------------------------------
> ' This product is used at your own risk. St.Thomas Software does not
> ' guarantee that this software does anything. Though it usually does
> ' something.
> '
> ' This software is freeware. It may be used for amy moral purpose.
> ' If you feel you need to pay for this product, please send one million
> ' dollars or whatever you feel is appropriate to
> '
> ' International Rescue Committee
> ' 122 East 42nd Street
> ' New York, NY 10168-1289
> '------------------------------------------------------------------------
>
>
> Thank you
> Philip S. Rist
>
>
>
>
>
.
- References:
- ColorMask BMP Mask Builder
- From: Philip S. Rist
- ColorMask BMP Mask Builder
- Prev by Date: Re: A Simple BMP Converter
- Next by Date: Re: ColorMask BMP Mask Builder
- Previous by thread: ColorMask BMP Mask Builder
- Next by thread: Re: ColorMask BMP Mask Builder
- Index(es):
Relevant Pages
|