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