# Generates VrVirtualCamera.ico (256x256 PNG inside ICO container) # Run: powershell -ExecutionPolicy Bypass -File make_icon.ps1 Add-Type -AssemblyName System.Drawing $size = 256 $bmp = New-Object System.Drawing.Bitmap($size, $size) $g = [System.Drawing.Graphics]::FromImage($bmp) $g.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias $g.Clear([System.Drawing.Color]::Transparent) # ---- Draw a simple camera icon ---- $bodyColor = [System.Drawing.Color]::FromArgb(255, 41, 128, 185) # blue $lensColor = [System.Drawing.Color]::FromArgb(255, 52, 152, 219) # lighter blue $ringColor = [System.Drawing.Color]::FromArgb(255, 200, 230, 255) # light ring $darkColor = [System.Drawing.Color]::FromArgb(255, 23, 70, 100) # dark accent # Body: rounded rectangle $brushBody = New-Object System.Drawing.SolidBrush($bodyColor) $bodyRect = New-Object System.Drawing.Rectangle(28, 90, 200, 128) $radius = 24 $path = New-Object System.Drawing.Drawing2D.GraphicsPath $d = $radius * 2 $path.AddArc($bodyRect.X, $bodyRect.Y, $d, $d, 180, 90) $path.AddArc($bodyRect.Right - $d, $bodyRect.Y, $d, $d, 270, 90) $path.AddArc($bodyRect.Right - $d, $bodyRect.Bottom - $d, $d, $d, 0, 90) $path.AddArc($bodyRect.X, $bodyRect.Bottom - $d, $d, $d, 90, 90) $path.CloseFigure() $g.FillPath($brushBody, $path) # Viewfinder bump on top $brushView = New-Object System.Drawing.SolidBrush($bodyColor) $g.FillRectangle($brushView, 90, 60, 76, 40) # Lens: outer ring $brushRing = New-Object System.Drawing.SolidBrush($ringColor) $ringRect = New-Object System.Drawing.Rectangle(72, 120, 112, 112) $g.FillEllipse($brushRing, $ringRect) # Lens: inner $brushLens = New-Object System.Drawing.SolidBrush($lensColor) $lensRect = New-Object System.Drawing.Rectangle(88, 136, 80, 80) $g.FillEllipse($brushLens, $lensRect) # Lens: dark pupil $brushDark = New-Object System.Drawing.SolidBrush($darkColor) $pupilRect = New-Object System.Drawing.Rectangle(110, 158, 36, 36) $g.FillEllipse($brushDark, $pupilRect) # Small indicator dot (red) on body corner $brushRed = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(255, 231, 76, 60)) $g.FillEllipse($brushRed, 200, 105, 14, 14) $g.Dispose() # Save PNG in memory $ms = New-Object System.IO.MemoryStream $bmp.Save($ms, [System.Drawing.Imaging.ImageFormat]::Png) $pngBytes = $ms.ToArray() $ms.Dispose() $bmp.Dispose() # ---- Pack into ICO container (single 256x256 PNG) ---- $icoPath = Join-Path $PSScriptRoot "VrVirtualCamera.ico" $fs = [System.IO.File]::Create($icoPath) $bw = New-Object System.IO.BinaryWriter($fs) # ICONDIR $bw.Write([UInt16]0) # reserved $bw.Write([UInt16]1) # type = icon $bw.Write([UInt16]1) # count = 1 # ICONDIRENTRY $bw.Write([Byte]0) # width 0 = 256 $bw.Write([Byte]0) # height 0 = 256 $bw.Write([Byte]0) # colorCount $bw.Write([Byte]0) # reserved $bw.Write([UInt16]1) # planes $bw.Write([UInt16]32) # bitCount $bw.Write([UInt32]$pngBytes.Length) # bytesInRes $bw.Write([UInt32]22) # imageOffset # PNG data $bw.Write($pngBytes) $bw.Close() $fs.Close() Write-Host "Generated $icoPath ($($pngBytes.Length) bytes)"