Creating graphic editor
CREATING GRAPHIC EDITOR
On Visual Basic
Main INTERFACE
Source Code:
Dim EraserColor As Long
Dim EraserSize As Integer
Dim PencilSize As Integer
Dim BoxInversed As Boolean
Dim GradationChanged As Boolean
Dim XX As Double, YY As Double
Dim XX2 As Double, YY2 As Double
Dim CurrentChoice
Dim TheColor As Long
Dim Red As Long
Dim Green As Long
Dim Blue As Long
Dim SecondColor As Long
Dim FirstColor As Long
Private sub> BoxOptionInterior_Click (Index As Integer)
BoxOptionSample. BackStyle = IIf (Index = 2, 0, 1)
If Index = 0 Then BoxOptionSample. BackColor = FirstColor
If Index = 1 Then BoxOptionSample. BackColor = SecondColor
If Index = 3 Then BoxOptionSample. BackColor = &HFFFFFF
End sub>
Private sub> ColorBoard_MouseMove (Button As Integer, Shift As Integer, x As Single, y As Single)
On Error GoTo 10
TheColor = ColorBoard. Point (x, y)
If Button <> 1 And Button <> 2 Then Exit sub>
If Button = 1 Then ForeColorSample. BackColor = TheColor: FirstColor = TheColor: g = 0
If Button = 2 Then BackColorSample. BackColor = TheColor: SecondColor = TheColor: g = 3
Scroll(g).Value = TakeRGB (TheColor, 0): Scroll (g + 1).Value = TakeRGB (TheColor, 1): Scroll (g + 2).Value = TakeRGB (TheColor, 2)
10 End sub>
Private sub> Command1_Click()
f$ = InputBox («Input the size of the eraser», «Drawer V1.0», EraserOptionText. Text)
f$ = RTrim$(LTrim$(f$))
If «» + f$ <> Str$(Val (f$)) Then MsgBox «Input error!», vbOKOnly, «Drawer V1.0»: Exit sub>
If Val (f$) <> Int (Val(f$)) Then MsgBox «Input error!», vbOKOnly, «Drawer V1.0»: Exit sub>
If Val (f$) > 500 Or Val (f$) < 100 Then MsgBox «Input error!», vbOKOnly, «Drawer V1.0»: Exit sub>
EraserOptionText. Text = f$
EraserSize = Val (f$)
Shape3. Width = Val (f$): Shape3. Height = Val (f$)
Shape1. Width = Val (f$): Shape1. Height = Val (f$)
End sub>
Private sub> Command2_Click()
f$ = InputBox («Input the border of the line or pencil», «Drawer V1.0», LineOptionText. Text)
f$ = RTrim$(LTrim$(f$))
If «» + f$ <> Str$(Val (f$)) Then MsgBox «Input error!», vbOKOnly, «Drawer V1.0»: Exit sub>
If Val (f$) <> Int (Val(f$)) Then MsgBox «Input error!», vbOKOnly, «Drawer V1.0»: Exit sub>
If Val (f$) > 10 Or Val (f$) < 1 Then MsgBox «Input error!», vbOKOnly, «Drawer V1.0»: Exit sub>
LineOptionText. Text = f$
PencilSize = Val (f$)
Line2. BorderWidth = Val (f$)
End sub>
Private sub> DialogBox_Click (Index As Integer)
Static coloring As Long
On Error GoTo 100
CommonDialog1. ShowColor
coloring = CommonDialog1. Color
Scroll (Index * 3).Value = TakeRGB (coloring, 0)
Scroll (Index * 3 + 1).Value = TakeRGB (coloring, 1)
Scroll (Index * 3 + 2).Value = TakeRGB (coloring, 2)
100
End sub>
Private sub> EraserOptionColor_Click (Index As Integer)
EraserColor = IIf (Index = 0, SecondColor, &HFFFFFF)
End sub>
Private sub> EraserOptionText_GotFocus()
Command1. SetFocus
End sub>
Private sub> Form_Load()
EraserColor = &HFFFFFF
PencilSize = 1
EraserSize = 300
CurrentChoice = 1
FirstColor = &H0
SecondColor = &HFFFFFF
End sub>
Private sub> Form_MouseMove (Button As Integer, Shift As Integer, x As Single, y As Single)
Shape1. Visible = False
End sub>
Private sub> GradationColor_Click (Index As Integer)
GradationChanged = True
End sub>
Private sub> GradationDirection_Click (Index As Integer)
GradationChanged = True
End sub>
Private sub> LineOptionText_GotFocus()
Command2. SetFocus
End sub>
Private sub> MainPic_MouseDown (Button As Integer, Shift As Integer, x As Single, y As Single)
If Button <> 1 Then Exit sub>
Select Case CurrentChoice
Case 1
Line1.X1 = x: Line1.X2 = x
Line1.Y1 = y: Line1.Y2 = y
Line1. Visible = True
Case 2
XX = x: YY = y
Case 3
MainPic. Line (Shape1. Left, Shape1. Top) – (Shape1. Left + Shape1. Width, Shape1. Top + Shape1. Width), EraserColor, BF
Case 4, 5, 8
XX = x: YY = y
XX2 = x: YY2 = y
Shape2. Shape = IIf (CurrentChoice = 5, 2, 0)
Shape2. Visible = True
Shape2. Left = x: Shape2. Top = y
Shape2. Width = 0: Shape2. Height = 0
End Select
End sub>
Private sub> MainPic_MouseMove (Button As Integer, Shift As Integer, x As Single, y As Single)
If CurrentChoice = 3 Then
Shape1. Left = x – Shape1. Width / 2
Shape1. Top = y – Shape1. Width / 2
Shape1. Visible = True
End If
If Button <> 1 Then GoTo 10
Select Case CurrentChoice
Case 1
Line1.X2 = x: Line1.Y2 = y
Case 2
MainPic. DrawWidth = PencilSize
MainPic. Line (XX, YY) – (x, y), FirstColor: XX = x: YY = y
MainPic. DrawWidth = 1
Case 3
MainPic. Line (Shape1. Left, Shape1. Top) – (Shape1. Left + Shape1. Width, Shape1. Top + Shape1. Width), EraserColor, BF
Case 4, 5, 8
XX2 = x: YY2 = y
Shape2. Left = IIf (x > XX, XX, x)
Shape2. Top = IIf (y > YY, YY, y)
Shape2. Width = Abs (x – XX)
Shape2. Height = Abs (y – YY)
Case 6
Scroll(0).Value = TakeRGB (MainPic. Point (x, y), 0)
Scroll(1).Value = TakeRGB (MainPic. Point (x, y), 1)
Scroll(2).Value = TakeRGB (MainPic. Point (x, y), 2)
End Select
Exit sub>
10 If Button <> 2 Or CurrentChoice <> 6 Then Exit sub>
Scroll(3).Value = TakeRGB (MainPic. Point (x, y), 0)
Scroll(4).Value = TakeRGB (MainPic. Point (x, y), 1)
Scroll(5).Value = TakeRGB (MainPic. Point (x, y), 2)
End sub>
Private sub> MainPic_MouseUp (Button As Integer, Shift As Integer, x As Single, y As Single)
If Button <> 1 Then Exit sub>
Select Case CurrentChoice
Case 1
MainPic. DrawWidth = PencilSize
MainPic. Line (Line1.X1, Line1.Y1) – (Line1.X2, Line1.Y2), FirstColor
MainPic. DrawWidth = 1
Line1. Visible = False
Case 4
If BoxOptionInterior(0).Value = True Then MainPic. Line (XX, YY) – (XX2, YY2), FirstColor, BF
If BoxOptionInterior(1).Value = True Then MainPic. Line (XX, YY) – (XX2, YY2), SecondColor, BF
If BoxOptionInterior(3).Value = True Then MainPic. Line (XX, YY) – (XX2, YY2), &HFFFFFF, BF
MainPic. Line (XX, YY) – (XX2, YY2), FirstColor, B
Shape2. Visible = False
Case 5
Rad = IIf (Abs(YY2 – YY) > Abs (XX2 – XX), Abs (YY2 – YY) / 2, Abs (XX2 – XX) / 2)
If XX2 <> XX Then MainPic. Circle ((XX2 + XX) / 2, (YY2 + YY) / 2), Rad, FirstColor, Abs (YY2 – YY) / Abs (XX2 – XX)
Shape2. Visible = False
Case 8
Dim sc1 As Long
Dim sc2 As Long
sc1 = FirstColor
If GradationColor(0).Value = True Then sc2 = SecondColor
If GradationColor(1).Value = True Then sc2 = &HFFFFFF
If GradationColor(2).Value = True Then sc2 = &H0
f1 = TakeRGB (sc2, 0): f2 = TakeRGB (sc2, 1): f3 = TakeRGB (sc2, 2)
v1 = TakeRGB (sc1, 0): v2 = TakeRGB (sc1, 1): v3 = TakeRGB (sc1, 2)
forstep = 10
If XX2 < XX Then xx3 = XX: XX = XX2: XX2 = xx3
If YY2 < YY Then yy3 = YY: YY = YY2: YY2 = yy3
ForStart = IIf (GradationDirection(0).Value = True, XX, YY)
Endpro = IIf (GradationDirection(0).Value = True, XX2, YY2)
For i = ForStart To Endpro Step forstep
D1 = v1 + (f1 – v1) / (Endpro – ForStart) * (i – ForStart)
D2 = v2 + (f2 – v2) / (Endpro – ForStart) * (i – ForStart)
D3 = v3 + (f3 – v3) / (Endpro – ForStart) * (i – ForStart)
If GradationDirection(0).Value = True Then MainPic. Line (i, YY) – (i, YY2), RGB (D1, D2, D3)
If GradationDirection(1).Value = True Then MainPic. Line (XX, i) – (XX2, i), RGB (D1, D2, D3)
Next i
Shape2. Visible = False
End Select
End sub>
Private sub> Scroll_Change (Index As Integer)
P = Int (Index / 3)
RGBValue(P).Caption = «RGB (» + RTrim$(Str$(Scroll (P * 3).Value)) +»,» + RTrim$(Str$(Scroll (P * 3 + 1).Value)) +»,» + RTrim$(Str$(Scroll (P * 3 + 2).Value)) +»)»
TheColor = RGB (Scroll(P * 3).Value, Scroll (P * 3 + 1).Value, Scroll (P * 3 + 2).Value)
If P = 0 Then FirstColor = TheColor: ForeColorSample. BackColor = TheColor Else SecondColor = TheColor: BackColorSample. BackColor = TheColor
Line2. BorderColor = FirstColor
BoxOptionSample. BorderColor = FirstColor
If BoxOptionInterior(0).Value = True Then BoxOptionSample. BackColor = FirstColor
If BoxOptionInterior(1).Value = True Then BoxOptionSample. BackColor = SecondColor
GradationChanged = True
End sub>
Private sub> Scroll_Scroll (Index As Integer)
P = Int (Index / 3)
RGBValue(P).Caption = «RGB (» + RTrim$(Str$(Scroll (P * 3).Value)) +»,» + RTrim$(Str$(Scroll (P * 3 + 1).Value)) +»,» + RTrim$(Str$(Scroll (P * 3 + 2).Value)) +»)»
TheColor = RGB (Scroll(P * 3).Value, Scroll (P * 3 + 1).Value, Scroll (P * 3 + 2).Value)
If P = 0 Then FirstColor = TheColor: ForeColorSample. BackColor = TheColor Else SecondColor = TheColor: BackColorSample. BackColor = TheColor
Line2. BorderColor = FirstColor
BoxOptionSample. BorderColor = FirstColor
If BoxOptionInterior(0).Value = True Then BoxOptionSample. BackColor = FirstColor
If BoxOptionInterior(1).Value = True Then BoxOptionSample. BackColor = SecondColor
GradationChanged = True
End sub>
Function TakeRGB (Colors As Long, Index As Integer) As Long
IndexColor = Colors
Red = IndexColor – Int (IndexColor / 256) * 256: IndexColor = (IndexColor – Red) / 256
Green = IndexColor – Int (IndexColor / 256) * 256: IndexColor = (IndexColor – Green) / 256
Blue = IndexColor
If Index = 0 Then TakeRGB = Red
If Index = 1 Then TakeRGB = Green
If Index = 2 Then TakeRGB = Blue
End Function
Private sub> sub>MenuBlur_Click()
f = 97: f2 = f / 2 – 1
All = (MainPic. ScaleWidth – f) * (MainPic. ScaleHeight – f) / f / f
For i = f2 To MainPic. ScaleWidth – f2 Step f
For j = f2 To MainPic. ScaleHeight – f2 Step f
r = 0: g = 0: b = 0
For k = – f2 To f2 Step f2 / 2: For l = – f2 To f2 Step f2 / 2
r = r + TakeRGB (MainPic. Point (i + k, j + l), 0)
g = g + TakeRGB (MainPic. Point (i + k, j + l), 1)
b = b + TakeRGB (MainPic. Point (i + k, j + l), 2)
Next l, k
MainPic. Line (i – f2, j – f2) – (i + f2, j + f2), RGB (r / 25, g / 25, b / 25), BF
h = h + 1
If h > All Then ProgressBar1. Value = 100 Else ProgressBar1. Value = h / All * 100
Next j
Next i
MsgBox «done!!!»
ProgressBar1. Value = 0
End sub>
Private sub> sub>MenuExit_Click()
End
End sub>
Private sub> sub>MenuNew_Click()
MainPic. Cls
End sub>
Private sub> sub>MenuOpen_Click()
On Error GoTo 10
CommonDialog1. ShowOpen
MainPic. Picture = LoadPicture (CommonDialog1. FileName)
10
End sub>
'Private sub> sub>MenuSharpen_Click()
'All = (MainPic. ScaleWidth – 2) * (MainPic. ScaleHeight – 2)
'For i = 1 To MainPic. ScaleWidth – 2
'For j = 1 To MainPic. ScaleHeight – 2
'r = TakeRGB (MainPic. Point (i, j), 0) + 0.5 * (TakeRGB (MainPic. Point (i, j), 0) – TakeRGB (MainPic. Point (i – 1, j – 1), 0))
'g = TakeRGB (MainPic. Point (i, j), 1) + 0.5 * (TakeRGB (MainPic. Point (i, j), 1) – TakeRGB (MainPic. Point (i – 1, j – 1), 1))
'b = TakeRGB (MainPic. Point (i, j), 2) + 0.5 * (TakeRGB (MainPic. Point (i, j), 2) – TakeRGB (MainPic. Point (i – 1, j – 1), 2))
'If r > 255 Then r = 255 Else If r < 0 Then r = 0
'If g > 255 Then g = 255 Else If g < 0 Then g = 0
'If b > 255 Then b = 255 Else If b < 0 Then b = 0
'h = h + 1
'ProgressBar1. Value = h / All * 100
'MainPic.PSet (i, j), RGB (r, g, b)
'Next j, i
'MsgBox «done!»
'End sub>
Private sub> Text1_Change()
End sub>
Private sub> Timer1_Timer()
If GradationChanged = False Then Exit sub>
Dim sc1 As Long
Dim sc2 As Long
sc1 = FirstColor
If GradationColor(0).Value = True Then sc2 = SecondColor
If GradationColor(1).Value = True Then sc2 = &HFFFFFF
If GradationColor(2).Value = True Then sc2 = &H0
f1 = TakeRGB (sc2, 0): f2 = TakeRGB (sc2, 1): f3 = TakeRGB (sc2, 2)
v1 = TakeRGB (sc1, 0): v2 = TakeRGB (sc1, 1): v3 = TakeRGB (sc1, 2)
ForStart = 0: forstep = 10
Endpro = IIf (GradationDirection(0).Value = True, Picture1. ScaleWidth, Picture1. ScaleHeight)
For i = ForStart To Endpro Step forstep
D1 = v1 + (f1 – v1) / Endpro * i
D2 = v2 + (f2 – v2) / Endpro * i
D3 = v3 + (f3 – v3) / Endpro * i
If GradationDirection(0).Value = True Then Picture1. Line (i, 0) – (i, Picture1. ScaleHeight), RGB (D1, D2, D3)
If GradationDirection(1).Value = True Then Picture1. Line (0, i) – (Picture1. ScaleWidth, i), RGB (D1, D2, D3)
10 Next i
GradationChanged = False
End sub>
Private sub> Toolbar1_ButtonClick (ByVal Button As ComctlLib. Button)
For i = 1 To 8
If Toolbar1. Buttons(i).Value = tbrPressed Then CurrentChoice = i
Next i
Shape1. Visible = False
Line1. Visible = False
For i = 0 To 4
Optionframe(i).Visible = False
Next i
Select Case CurrentChoice
Case 1 To 2
Optionframe(0).Visible = True
Case 3
Optionframe(2).Visible = True
Case 4
Optionframe(1).Visible = True
Case 5 To 7
Optionframe(3).Visible = True
Case 8
GradationChanged = True
Optionframe(4).Visible = True
End Select
End sub>
Some Graphic Actions with Graphic Editor