PoshCode Archive  Artifact [b74235627e]

Artifact b74235627e0de0cf7b6c9fa19a614eb12ec6684cd935b16343d8849886a95326:

  • File ImageViewer.ps1 — part of check-in [659d0c5131] at 2018-06-10 13:46:44 on branch trunk — This is not my script, author is greg zakharov. I found this script very useful for me. (user: kakto_Oz size: 8064)

# encoding: ascii
# api: powershell
# title: ImageViewer
# description: This is not my script, author is greg zakharov. I found this script very useful for me.
# version: 1.01
# type: function
# author: kakto_Oz
# license: CC0
# x-poshcode-id: 4848
# x-archived: 2014-04-10T15:55:22
# x-published: 2014-01-29T10:45:00
#
#
#requires -version 2.0
function frmMain_Show {
  Add-Type -AssemblyName System.Windows.Forms
  [Windows.Forms.Application]::EnableVisualStyles()
  
  $ico = [Drawing.Icon]::ExtractAssociatedIcon(($PSHome + '\powershell.exe'))
  
  $ia = New-Object Drawing.Imaging.ImageAttributes
  
  function getset([Drawing.Bitmap]$b) {
    $gfx = [Drawing.Graphics]::FromImage($b)
    $gfx.DrawImage($b, (New-Object Drawing.Rectangle 0, 0, $b.Width, $b.Height),
            0, 0, $b.Width, $b.Height, [Drawing.GraphicsUnit]::Pixel, $ia
    )
    $gfx.Flush()
  }
  
  $frmMain = New-Object Windows.Forms.Form
  $mnuMain = New-Object Windows.Forms.MenuStrip
  $mnuFile = New-Object Windows.Forms.ToolStripMenuItem
  $mnuOpen = New-Object Windows.Forms.ToolStripMenuItem
  $mnuExit = New-Object Windows.Forms.ToolStripMenuItem
  $mnuView = New-Object Windows.Forms.ToolStripMenuItem
  $mnuTool = New-Object Windows.Forms.ToolStripMenuItem
  $mnuHelp = New-Object Windows.Forms.ToolStripMenuItem
  $mnuInfo = New-Object Windows.Forms.ToolStripMenuItem
  $tsStrip = New-Object Windows.Forms.ToolStrip
  $tsLbl_1 = New-Object Windows.Forms.ToolStripLabel
  $tsLbl_2 = New-Object Windows.Forms.ToolStripLabel
  $tsLbl_3 = New-Object Windows.Forms.ToolStripLabel
  $tsCbo_1 = New-Object Windows.Forms.ToolStripComboBox
  $tsCbo_2 = New-Object Windows.Forms.ToolStripComboBox
  $tsBtn_1 = New-Object Windows.Forms.ToolStripButton
  $tsBtn_2 = New-Object Windows.Forms.ToolStripButton
  $pbImage = New-Object Windows.Forms.PictureBox
  $sbStrip = New-Object Windows.Forms.StatusStrip
  $sbLabel = New-Object Windows.Forms.ToolStripStatusLabel
  #
  #common
  #
  $mnuMain.Items.AddRange(@($mnuFile, $mnuView, $mnuHelp))
  $tsLbl_1.Text = "Mode:"
  $tsLbl_2.Text = "Style:"
  $tsLbl_3.Text = "Rotation:"
  $pbImage.Dock = [Windows.Forms.DockStyle]::Fill
  $sbLabel.AutoSize = $true
  #
  #mnuFile
  #
  $mnuFile.DropDownItems.AddRange(@($mnuOpen, $mnuExit))
  $mnuFile.Text = "&File"
  #
  #mnuOpen
  #
  $mnuOpen.ShortcutKeys = [Windows.Forms.Keys]::Control, [Windows.Forms.Keys]::O
  $mnuOpen.Text = "&Open..."
  $mnuOpen.Add_Click({
    $neg = $ret = $null #flush old images
    $tsCbo_2.SelectedIndex = 0 #set a normal style
    
    (New-Object Windows.Forms.OpenFileDialog) | % {
      $_.Filter = "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|GIF (*.gif)|*.gif|PNG (*.png)|*.png"
      $_.InitialDirectory = $pwd.Path
      
      if ($_.ShowDialog() -eq [Windows.Forms.DialogResult]::OK) {
        $img = [Drawing.Image]::FromFile($_.FileName)
        $pbImage.Image = $img
        $pbImage.SizeMode = [Windows.Forms.PictureBoxSizeMode]$tsCbo_1.SelectedItem
        $tsCbo_2.Enabled = $true
        $bmp = New-Object Drawing.Bitmap $img
        $def = $bmp.Clone() #roll back changes
      }
    }
    $sbLabel.Text = ("Width: {0}$(' ' * 3)Height: {1}" -f $img.Width, $img.Height)
  })
  #
  #mnuExit
  #
  $mnuExit.ShortcutKeys = [Windows.Forms.Keys]::Control, [Windows.Forms.Keys]::X
  $mnuExit.Text = "E&xit"
  $mnuExit.Add_Click({$frmMain.Close()})
  #
  #mnuView
  #
  $mnuView.DropDownItems.AddRange(@($mnuTool))
  $mnuView.Text = "&View"
  #
  #mnuTool
  #
  $mnuTool.ShortcutKeys = [Windows.Forms.Keys]::Control, [Windows.Forms.Keys]::T
  $mnuTool.Text = "&Tools Panel"
  $mnuTool.Add_Click({
    $toggle =! $mnuTool.Checked
    $mnuTool.Checked = $toggle
    $tsStrip.Visible = $toggle
  })
  #
  #mnuHelp
  #
  $mnuHelp.DropDownItems.AddRange(@($mnuInfo))
  $mnuHelp.Text = "&Help"
  #
  #mnuInfo
  #
  $mnuInfo.Text = "About..."
  $mnuInfo.Add_Click({frmInfo_Show})
  #
  #tsStrip
  #
  $tsStrip.Items.AddRange(@($tsLbl_1, $tsCbo_1, $tsLbl_2, $tsCbo_2, $tsLbl_3, $tsBtn_1, $tsBtn_2))
  $tsStrip.Visible = $false
  #
  #tsCbo_1
  #
  [Enum]::GetValues([Windows.Forms.PictureBoxSizeMode]) | % {
    [void]$tsCbo_1.Items.Add($_)
  }
  $tsCbo_1.SelectedIndex = 4
  $tsCbo_1.Add_SelectedIndexChanged({
    $pbImage.SizeMode = [Windows.Forms.PictureBoxSizeMode]$tsCbo_1.SelectedItem
  })
  #
  #tsCbo_2
  #
  $tsCbo_2.Enabled = $false
  $tsCbo_2.Items.AddRange(@('Normal', 'Negative', 'Retro'))
  $tsCbo_2.SelectedIndex = 0
  $tsCbo_2.Add_SelectedIndexChanged({
    switch ($tsCbo_2.SelectedIndex) {
      0 {$pbImage.Image = $def}
      1 {
        if ($neg -eq $null) {
          $cm = New-Object Drawing.Imaging.ColorMatrix
          $cm.Matrix40 = $cm.Matrix41 = $cm.Matrix42 = 1
          $cm.Matrix00 = $cm.Matrix11 = $cm.Matrix22 = -1
          $ia.SetColorMatrix($cm)
          
          getset $bmp
          
          $neg = $bmp.Clone()
        }
        $pbImage.Image = $neg
      }
      2 {
        $bmp = $def.Clone()
        if ($ret -eq $null) {
          $cm = New-Object Drawing.Imaging.ColorMatrix
          $cm.Matrix00 = $cm.Matrix01 = $cm.Matrix02 = $cm.Matrix10 = $cm.Matrix11 = `
          $cm.Matrix12 = $cm.Matrix20 = $cm.Matrix21 = $cm.Matrix22 = 1/3
          $ia.SetColorMatrix($cm)
          
          getset $bmp
          
          $ret = $bmp.Clone()
        }
        $pbImage.Image = $ret
      }
    } #switch
  })
  #
  #tsBtn_1
  #
  $tsBtn_1.Text = "Left"
  $tsBtn_1.Add_Click({
    if ($pbImage.Image -ne $null) {
      $pbImage.Image.RotateFlip([Drawing.RotateFlipType]::Rotate90FlipXY)
      $pbImage.Refresh()
    }
  })
  #
  #tsBtn_2
  #
  $tsBtn_2.Text = "Right"
  $tsBtn_2.Add_Click({
    if ($pbImage.Image -ne $null) {
      $pbImage.Image.RotateFlip([Drawing.RotateFlipType]::Rotate270FlipXY)
      $pbImage.Refresh()
    }
  })
  #
  #sbStrip
  #
  $sbStrip.Items.AddRange(@($sbLabel))
  $sbStrip.SizingGrip = $false
  #
  #frmMain
  #
  $frmMain.ClientSize = New-Object Drawing.Size(800, 547)
  $frmMain.Controls.AddRange(@($pbImage, $sbStrip, $tsStrip, $mnuMain))
  $frmMain.FormBorderStyle = [Windows.Forms.FormBorderStyle]::FixedSingle
  $frmMain.Icon = $ico
  $frmMain.MainMenuStrip = $mnuMain
  $frmMain.StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen
  $frmMain.Text = "Image Viewer"
  $frmMain.Add_Load({$sbLabel.Text = "Ready"})
  
  [void]$frmMain.ShowDialog()
}

function frmInfo_Show {
  $frmInfo = New-Object Windows.Forms.Form
  $pbImage = New-Object Windows.Forms.PictureBox
  $lblName = New-Object Windows.Forms.Label
  $lblCopy = New-Object Windows.Forms.Label
  $btnExit = New-Object Windows.Forms.Button
  #
  #pbImage
  #
  $pbImage.Image = $ico.ToBitmap()
  $pbImage.Location = New-Object Drawing.Point(16, 16)
  $pbImage.Size = New-Object Drawing.Size(32, 32)
  $pbImage.SizeMode = [Windows.Forms.PictureBoxSizeMode]::StretchImage
  #
  #lblName
  #
  $lblName.Font = $bol2
  $lblName.Location = New-Object Drawing.Point(53, 19)
  $lblName.Size = New-Object Drawing.Size(360, 18)
  $lblName.Text = "Image Viewer v1.01"
  #
  #lblCopy
  #
  $lblCopy.Location = New-Object Drawing.Point(67, 37)
  $lblCopy.Size = New-Object Drawing.Size(360, 23)
  $lblCopy.Text = "Copyright (C) 2013-2014 greg zakharov"
  #
  #btnExit
  #
  $btnExit.Location = New-Object Drawing.Point(135, 67)
  $btnExit.Text = "OK"
  #
  #frmInfo
  #
  $frmInfo.AcceptButton = $btnExit
  $frmInfo.CancelButton = $btnExit
  $frmInfo.ClientSize = New-Object Drawing.Size(350, 110)
  $frmInfo.ControlBox = $false
  $frmInfo.Controls.AddRange(@($pbImage, $lblName, $lblCopy, $btnExit))
  $frmInfo.FormBorderStyle = [Windows.Forms.FormBorderStyle]::FixedSingle
  $frmInfo.ShowInTaskBar = $false
  $frmInfo.StartPosition = [Windows.Forms.FormStartPosition]::CenterParent
  $frmInfo.Text = "About..."

  [void]$frmInfo.ShowDialog()
}

frmMain_Show