Gunta писал(а):
Примитивный редактор BMP картинокДобавил рисование прямоугольников.
Add(MainForm,14623793,273,105)
{
link(onCreate,7937065:doString,[])
}
Add(WinExec,12830869,378,105)
{
FileName="PowerShell"
Mode=0
Point(onConsoleResult)
Point(onConsoleError)
Point(doConsoleExec)
Point(onConsoleTerminate)
link(onConsoleTerminate,14623793:doClose,[(417,139)(417,160)(263,160)(263,132)])
}
Add(FormatStr,7937065,329,119)
{
Mask="$Win32 = Add-Type -MemberDefinition @'\r\n [DllImport("""kernel32.dll""")]\r\n public static extern IntPtr GetConsoleWindow();\r\n\r\n [DllImport("""user32.dll""")]\r\n public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);\r\n'@ -Name 'Win32Console' -Namespace 'Win32' -PassThru\r\n\r\n$consoleHandle = $Win32::GetConsoleWindow()\r\nif ($consoleHandle -ne [IntPtr]::Zero) {\r\n $null = $Win32::ShowWindow($consoleHandle, 0)\r\n}\r\n\r\nAdd-Type -AssemblyName System.Windows.Forms\r\nAdd-Type -AssemblyName System.Drawing\r\n\r\n$form = New-Object System.Windows.Forms.Form\r\n$form.Text = 'BMP Редактор'\r\n$form.Size = New-Object System.Drawing.Size 900, 720\r\n$form.MinimumSize = New-Object System.Drawing.Size 550, 300\r\n$form.StartPosition = 'CenterScreen'\r\n\r\n$global:bmp = New-Object System.Drawing.Bitmap 800, 600\r\n$global:g = [System.Drawing.Graphics]::FromImage($global:bmp)\r\n$global:g.Clear([System.Drawing.Color]::White)\r\n\r\n$isDrawing = $false\r\n$startPoint = New-Object System.Drawing.Point \r\n$lastPoint = New-Object System.Drawing.Point \r\n$currentTool = 'Pencil' \r\n$history = New-Object System.Collections.Generic.List[System.Drawing.Bitmap]\r\n\r\nfunction SaveToHistory {\r\n if ($history.Count -ge 20) { $history.RemoveAt(0) }\r\n $history.Add($global:bmp.Clone())\r\n}\r\nSaveToHistory\r\n\r\n$panel = New-Object System.Windows.Forms.Panel\r\n$panel.Location = New-Object System.Drawing.Point 10, 50\r\n$panel.Width = $form.ClientSize.Width - 20\r\n$panel.Height = $form.ClientSize.Height - 60\r\n$panel.BorderStyle = [System.Windows.Forms.BorderStyle]::Fixed3D\r\n$panel.AutoScroll = $true\r\n$panel.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor \r\n [System.Windows.Forms.AnchorStyles]::Bottom -bor \r\n [System.Windows.Forms.AnchorStyles]::Left -bor \r\n [System.Windows.Forms.AnchorStyles]::Right\r\n$form.Controls.Add($panel)\r\n\r\n$pictureBox = New-Object System.Windows.Forms.PictureBox\r\n$pictureBox.Location = New-Object System.Drawing.Point 0, 0\r\n$pictureBox.SizeMode = [System.Windows.Forms.PictureBoxSizeMode]::AutoSize\r\n$pictureBox.Image = $global:bmp\r\n$panel.Controls.Add($pictureBox)\r\n\r\nfunction GetRectangle ([System.Drawing.Point]$p1, [System.Drawing.Point]$p2) {\r\n $x = [Math]::Min($p1.X, $p2.X)\r\n $y = [Math]::Min($p1.Y, $p2.Y)\r\n $w = [Math]::Abs($p1.X - $p2.X)\r\n $h = [Math]::Abs($p1.Y - $p2.Y)\r\n return New-Object System.Drawing.Rectangle $x, $y, $w, $h\r\n}\r\n\r\n$pictureBox.Add_Paint({\r\n param($sender, $e)\r\n # Если мы рисуем прямоугольник и мышь зажата, показываем временный контур поверх холста\r\n if ($global:isDrawing -and $global:currentTool -eq 'Rect') {\r\n $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, 2)\r\n $rect = GetRectangle $global:startPoint $global:lastPoint\r\n $e.Graphics.DrawRectangle($pen, $rect)\r\n $pen.Dispose()\r\n }\r\n})\r\n\r\n$pictureBox.Add_MouseDown({\r\n param($sender, $e)\r\n if ($e.Button -eq [System.Windows.Forms.MouseButtons]::Left) {\r\n $global:isDrawing = $true\r\n $global:startPoint = $e.Location\r\n $global:lastPoint = $e.Location\r\n }\r\n})\r\n\r\n$pictureBox.Add_MouseMove({\r\n param($sender, $e)\r\n if ($global:isDrawing) {\r\n $global:lastPoint = $e.Location\r\n \r\n if ($global:currentTool -eq 'Pencil') {\r\n $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, 2)\r\n $global:g.DrawLine($pen, $global:startPoint, $e.Location)\r\n $pen.Dispose()\r\n $global:startPoint = $e.Location \r\n $pictureBox.Invalidate()\r\n }\r\n else {\r\n $pictureBox.Invalidate()\r\n }\r\n }\r\n})\r\n\r\n$pictureBox.Add_MouseUp({\r\n param($sender, $e)\r\n if ($global:isDrawing) {\r\n $global:isDrawing = $false\r\n \r\n if ($global:currentTool -eq 'Rect') {\r\n $pen = New-Object System.Drawing.Pen([System.Drawing.Color]::Black, 2)\r\n $rect = GetRectangle $global:startPoint $e.Location\r\n $global:g.DrawRectangle($pen, $rect)\r\n $pen.Dispose()\r\n $pictureBox.Invalidate()\r\n }\r\n \r\n SaveToHistory\r\n }\r\n})\r\n\r\n$btnOpen = New-Object System.Windows.Forms.Button\r\n$btnOpen.Text = 'Открыть BMP'\r\n$btnOpen.Location = New-Object System.Drawing.Point 10, 10\r\n$btnOpen.Size = New-Object System.Drawing.Size 100, 30\r\n$btnOpen.Add_Click({\r\n $ofd = New-Object System.Windows.Forms.OpenFileDialog\r\n $ofd.Filter = 'BMP Files (*.bmp)|*.bmp'\r\n if ($ofd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {\r\n $global:g.Dispose(); $global:bmp.Dispose()\r\n foreach ($h in $history) { $h.Dispose() }; $history.Clear()\r\n \r\n $loadedImg = [System.Drawing.Image]::FromFile($ofd.FileName)\r\n $global:bmp = New-Object System.Drawing.Bitmap $loadedImg\r\n $loadedImg.Dispose()\r\n \r\n $global:g = [System.Drawing.Graphics]::FromImage($global:bmp)\r\n $pictureBox.Image = $global:bmp\r\n SaveToHistory\r\n $pictureBox.Invalidate()\r\n }\r\n})\r\n$form.Controls.Add($btnOpen)\r\n\r\n$btnUndo = New-Object System.Windows.Forms.Button\r\n$btnUndo.Text = 'Отмена (Undo)'\r\n$btnUndo.Location = New-Object System.Drawing.Point 115, 10\r\n$btnUndo.Size = New-Object System.Drawing.Size 100, 30\r\n$btnUndo.Add_Click({\r\n if ($history.Count -gt 1) {\r\n $history.RemoveAt($history.Count - 1)\r\n $previousBmp = $history[$history.Count - 1]\r\n \r\n $global:g.Dispose()\r\n $global:bmp = $previousBmp.Clone()\r\n $global:g = [System.Drawing.Graphics]::FromImage($global:bmp)\r\n \r\n $pictureBox.Image = $global:bmp\r\n $pictureBox.Invalidate()\r\n }\r\n})\r\n$form.Controls.Add($btnUndo)\r\n\r\n$btnSave = New-Object System.Windows.Forms.Button\r\n$btnSave.Text = 'Сохранить BMP'\r\n$btnSave.Location = New-Object System.Drawing.Point 220, 10\r\n$btnSave.Size = New-Object System.Drawing.Size 100, 30\r\n$btnSave.Add_Click({\r\n $sfd = New-Object System.Windows.Forms.SaveFileDialog\r\n $sfd.Filter = 'BMP Files (*.bmp)|*.bmp'\r\n if ($sfd.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {\r\n $bmpFormat = [System.Drawing.Imaging.ImageFormat]::Bmp\r\n $global:bmp.Save($sfd.FileName, $bmpFormat)\r\n [System.Windows.Forms.MessageBox]::Show('Файл успешно сохранен!', 'Успех')\r\n }\r\n})\r\n$form.Controls.Add($btnSave)\r\n\r\n$btnPencil = New-Object System.Windows.Forms.Button\r\n$btnPencil.Text = 'Карандаш'\r\n$btnPencil.Location = New-Object System.Drawing.Point 340, 10\r\n$btnPencil.Size = New-Object System.Drawing.Size 100, 30\r\n$btnPencil.BackColor = [System.Drawing.Color]::LightGray\r\n$btnPencil.Add_Click({\r\n $global:currentTool = 'Pencil'\r\n $btnPencil.BackColor = [System.Drawing.Color]::LightGray\r\n $btnRect.BackColor = [System.Drawing.Color]::FromName('Control')\r\n})\r\n$form.Controls.Add($btnPencil)\r\n\r\n$btnRect = New-Object System.Windows.Forms.Button\r\n$btnRect.Text = 'Прямоугольник'\r\n$btnRect.Location = New-Object System.Drawing.Point 445, 10\r\n$btnRect.Size = New-Object System.Drawing.Size 110, 30\r\n$btnRect.Add_Click({\r\n $global:currentTool = 'Rect'\r\n $btnRect.BackColor = [System.Drawing.Color]::LightGray\r\n $btnPencil.BackColor = [System.Drawing.Color]::FromName('Control')\r\n})\r\n$form.Controls.Add($btnRect)\r\n\r\n$form.Add_FormClosed({\r\n $global:g.Dispose()\r\n $global:bmp.Dispose()\r\n foreach ($h in $history) { $h.Dispose() }\r\n})\r\n\r\n[System.Windows.Forms.Application]::Run($form)\r\n"
link(onFString,12830869:doConsoleExec,[])
}



Поиск
Друзья
Администрация