home *** CD-ROM | disk | FTP | other *** search
/ Mastering Visual Basic 6 / mastvb6.iso / mastvb6.exe / Ch07 / Image / image.Frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1998-07-03  |  9.0 KB  |  249 lines

  1. VERSION 5.00
  2. Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
  3. Begin VB.Form Form1 
  4.    BorderStyle     =   5  'Sizable ToolWindow
  5.    Caption         =   "Image Processing"
  6.    ClientHeight    =   4515
  7.    ClientLeft      =   3090
  8.    ClientTop       =   2385
  9.    ClientWidth     =   5085
  10.    LinkTopic       =   "Form1"
  11.    MaxButton       =   0   'False
  12.    MinButton       =   0   'False
  13.    PaletteMode     =   1  'UseZOrder
  14.    ScaleHeight     =   301
  15.    ScaleMode       =   3  'Pixel
  16.    ScaleWidth      =   339
  17.    ShowInTaskbar   =   0   'False
  18.    Begin VB.PictureBox Picture1 
  19.       AutoRedraw      =   -1  'True
  20.       AutoSize        =   -1  'True
  21.       Height          =   4470
  22.       Left            =   0
  23.       ScaleHeight     =   294
  24.       ScaleMode       =   3  'Pixel
  25.       ScaleWidth      =   333
  26.       TabIndex        =   0
  27.       Top             =   0
  28.       Width           =   5055
  29.    End
  30.    Begin MSComDlg.CommonDialog CommonDialog1 
  31.       Left            =   6045
  32.       Top             =   105
  33.       _ExtentX        =   847
  34.       _ExtentY        =   847
  35.       _Version        =   393216
  36.       FontSize        =   2.54052e-29
  37.    End
  38.    Begin VB.Menu FileMenu 
  39.       Caption         =   "File"
  40.       Begin VB.Menu FileOpen 
  41.          Caption         =   "Open Image"
  42.       End
  43.       Begin VB.Menu FileSave 
  44.          Caption         =   "Save Image"
  45.       End
  46.       Begin VB.Menu FileExit 
  47.          Caption         =   "Exit"
  48.       End
  49.    End
  50.    Begin VB.Menu ProcessMenu 
  51.       Caption         =   "Process Image"
  52.       Begin VB.Menu ProcessSmooth 
  53.          Caption         =   "Smooth"
  54.       End
  55.       Begin VB.Menu ProcessSharpen 
  56.          Caption         =   "Sharpen"
  57.       End
  58.       Begin VB.Menu ProcessEmboss 
  59.          Caption         =   "Emboss"
  60.       End
  61.       Begin VB.Menu ProcessDiffuse 
  62.          Caption         =   "Diffuse"
  63.       End
  64.       Begin VB.Menu ProcessSolarize 
  65.          Caption         =   "Solarize"
  66.       End
  67.       Begin VB.Menu separator 
  68.          Caption         =   "-"
  69.       End
  70.       Begin VB.Menu ProcessCustom 
  71.          Caption         =   "Custom Filter"
  72.       End
  73.    End
  74. Attribute VB_Name = "Form1"
  75. Attribute VB_GlobalNameSpace = False
  76. Attribute VB_Creatable = False
  77. Attribute VB_PredeclaredId = True
  78. Attribute VB_Exposed = False
  79. Private Sub FileExit_Click()
  80.     End
  81. End Sub
  82. Private Sub FileOpen_Click()
  83. Dim i As Integer, j As Integer
  84. Dim red As Integer, green As Integer, blue As Integer
  85. Dim pixel As Long
  86. Dim PictureName As String
  87.     CommonDialog1.InitDir = App.Path
  88.     CommonDialog1.Filter = "Images|*.BMP;*.GIF;*.JPG;*.DIB|All Files|*.*"
  89.     CommonDialog1.Action = 1
  90.     PictureName = CommonDialog1.FileName
  91.     If PictureName = "" Then Exit Sub
  92.     Picture1.Picture = LoadPicture(PictureName)
  93.     Form1.Refresh
  94.     X = Picture1.ScaleWidth
  95.     Y = Picture1.ScaleHeight
  96.     If X > 500 Or Y > 500 Then
  97.         MsgBox "Image too large to process. Please try loading a smaller image."
  98.         X = 0
  99.         Y = 0
  100.         Exit Sub
  101.     End If
  102.     Form1.Width = Form1.ScaleX(Picture1.Width + 6, vbPixels, vbTwips)
  103.     Form1.Height = Form1.ScaleY(Picture1.Height + 30, vbPixels, vbTwips)
  104.     Form1.Refresh
  105.     Form3.Show
  106.     Form3.Refresh
  107.     For i = 0 To Y - 1
  108.         For j = 0 To X - 1
  109.             pixel = Form1.Picture1.Point(j, i)
  110.             red = pixel& Mod 256
  111.             green = ((pixel And &HFF00) / 256&) Mod 256&
  112.             blue = (pixel And &HFF0000) / 65536
  113.             ImagePixels(0, i, j) = red
  114.             ImagePixels(1, i, j) = green
  115.             ImagePixels(2, i, j) = blue
  116.         Next
  117.         Form3.ProgressBar1.Value = i * 100 / (Y - 1)
  118.     Next
  119.     Form3.Hide
  120. End Sub
  121. Private Sub FileSave_Click()
  122. Dim PictureName As String
  123.     CommonDialog1.Action = 2
  124.     PictureName = CommonDialog1.FileName
  125.     SavePicture Picture1.Image, PictureName
  126. End Sub
  127. Private Sub ProcessCustom_Click()
  128. Dim RedSum As Integer, GreenSum As Integer, BlueSum As Integer
  129. Dim red  As Integer, green As Integer, blue  As Integer
  130. Dim fi  As Integer, fj  As Integer
  131. Dim i  As Integer, j  As Integer
  132. Dim Offset  As Integer
  133.     Form2.Show 1    ' wait for user to define filter
  134.     If FilterCancel = True Then Exit Sub
  135.     If FilterNorm = 0 Then FilterNorm = 1
  136.     If Form2.Option1.Value Then
  137.         Offset = 1
  138.     Else
  139.         Offset = 2
  140.     End If
  141.     For i = Offset To Y - Offset - 1
  142.         For j = Offset To X - Offset - 1
  143.             RedSum = 0: GreenSum = 0: BlueSum = 0
  144.             For fi = -Offset To Offset
  145.                 For fj = -Offset To Offset
  146.                     RedSum = RedSum + ImagePixels(0, i + fi, j + fj) * CustomFilter(fi + 2, fj + 2)
  147.                     GreenSum = GreenSum + ImagePixels(1, i + fi, j + fj) * CustomFilter(fi + 2, fj + 2)
  148.                     BlueSum = BlueSum + ImagePixels(2, i + fi, j + fj) * CustomFilter(fi + 2, fj + 2)
  149.                 Next
  150.             Next
  151.             red = Abs(RedSum / FilterNorm + FilterBias)
  152.             green = Abs(GreenSum / FilterNorm + FilterBias)
  153.             blue = Abs(BlueSum / FilterNorm + FilterBias)
  154.             Picture1.PSet (j, i), RGB(red, green, blue)
  155.         Next
  156.         DoEvents
  157.     Next
  158. End Sub
  159. Private Sub ProcessDiffuse_Click()
  160. Dim i As Integer, j As Integer
  161. Dim Rx As Integer, Ry As Integer
  162. Dim red As Integer, green As Integer, blue As Integer
  163.     For i = 2 To Y - 3
  164.         For j = 2 To X - 3
  165.             Rx = Rnd() * 4 - 2
  166.             Ry = Rnd() * 4 - 2
  167.             red = ImagePixels(0, i + Rx, j + Ry)
  168.             green = ImagePixels(1, i + Rx, j + Ry)
  169.             blue = ImagePixels(2, i + Rx, j + Ry)
  170.             Picture1.PSet (j, i), RGB(red, green, blue)
  171.         Next
  172.         DoEvents
  173.     Next
  174. End Sub
  175. Private Sub ProcessEmboss_Click()
  176. Dim i As Integer, j As Integer
  177. Const Dx As Integer = 1
  178. Const Dy As Integer = 1
  179. Dim red As Integer, green As Integer, blue As Integer
  180.     For i = 1 To Y - 2
  181.         For j = 1 To X - 2
  182.             red = Abs(ImagePixels(0, i, j) - ImagePixels(0, i + Dx, j + Dy) + 128)
  183.             green = Abs(ImagePixels(1, i, j) - ImagePixels(1, i + Dx, j + Dy) + 128)
  184.             blue = Abs(ImagePixels(2, i, j) - ImagePixels(2, i + Dx, j + Dy) + 128)
  185.             Picture1.PSet (j, i), RGB(red, green, blue)
  186.         Next
  187.         Picture1.Refresh
  188.     Next
  189. End Sub
  190. Private Sub ProcessSharpen_Click()
  191. Dim i As Integer, j As Integer
  192. Const Dx As Integer = 1
  193. Const Dy As Integer = 1
  194. Dim red As Integer, green As Integer, blue As Integer
  195.     For i = 1 To Y - 2
  196.         For j = 1 To X - 2
  197.             red = ImagePixels(0, i, j) + 0.5 * (ImagePixels(0, i, j) - ImagePixels(0, i - Dx, j - Dy))
  198.             green = ImagePixels(1, i, j) + 0.5 * (ImagePixels(1, i, j) - ImagePixels(1, i - Dx, j - Dy))
  199.             blue = ImagePixels(2, i, j) + 0.5 * (ImagePixels(2, i, j) - ImagePixels(2, i - Dx, j - Dy))
  200.             If red > 255 Then red = 255
  201.             If red < 0 Then red = 0
  202.             If green > 255 Then green = 255
  203.             If green < 0 Then green = 0
  204.             If blue > 255 Then blue = 255
  205.             If blue < 0 Then blue = 0
  206.             Picture1.PSet (j, i), RGB(red, green, blue)
  207.         Next
  208.         Picture1.Refresh
  209.     Next
  210. End Sub
  211. Private Sub ProcessSmooth_Click()
  212. Dim i As Integer, j As Integer
  213. Dim red As Integer, green As Integer, blue As Integer
  214.     For i = 1 To Y - 2
  215.         For j = 1 To X - 2
  216.             red = ImagePixels(0, i - 1, j - 1) + ImagePixels(0, i - 1, j) + ImagePixels(0, i - 1, j + 1) + _
  217.             ImagePixels(0, i, j - 1) + ImagePixels(0, i, j) + ImagePixels(0, i, j + 1) + _
  218.             ImagePixels(0, i + 1, j - 1) + ImagePixels(0, i + 1, j) + ImagePixels(0, i + 1, j + 1)
  219.             
  220.             green = ImagePixels(1, i - 1, j - 1) + ImagePixels(1, i - 1, j) + ImagePixels(1, i - 1, j + 1) + _
  221.             ImagePixels(1, i, j - 1) + ImagePixels(1, i, j) + ImagePixels(1, i, j + 1) + _
  222.             ImagePixels(1, i + 1, j - 1) + ImagePixels(1, i + 1, j) + ImagePixels(1, i + 1, j + 1)
  223.             
  224.             blue = ImagePixels(2, i - 1, j - 1) + ImagePixels(2, i - 1, j) + ImagePixels(2, i - 1, j + 1) + _
  225.             ImagePixels(2, i, j - 1) + ImagePixels(2, i, j) + ImagePixels(2, i, j + 1) + _
  226.             ImagePixels(2, i + 1, j - 1) + ImagePixels(2, i + 1, j) + ImagePixels(2, i + 1, j + 1)
  227.             Picture1.PSet (j, i), RGB(red / 9, green / 9, blue / 9)
  228.         Next
  229.         Picture1.Refresh
  230.     Next
  231. End Sub
  232. Private Sub ProcessSolarize_Click()
  233. Dim i As Integer, j As Integer
  234. Dim red As Integer, green As Integer, blue As Integer
  235.     For i = 1 To Y - 2
  236.         For j = 1 To X - 2
  237.             red = ImagePixels(0, i, j)
  238.             green = ImagePixels(1, i, j)
  239.             blue = ImagePixels(2, i, j)
  240.             If ((red < 128) Or (red > 255)) Then red = 255 - red
  241.             If ((green < 128) Or (green > 255)) Then green = 255 - green
  242.             If ((blue < 128) Or (blue > 255)) Then blue = 255 - blue
  243.             Picture1.PSet (j, i), RGB(red, green, blue)
  244.         Next
  245.         DoEvents
  246.     Next
  247.     Picture1.Refresh
  248. End Sub
  249.