PowerShell: Vielleicht sind negative Pixelgrößen ja zu irgendwas gut…

Heute wollte ich mal eine Bitmap anlegen, die genauso groß ist wie der Bildschirm. Gesagt, getan:

Add-Type -AssemblyName System.Drawing
$video = @(Get-WmiObject Win32_VideoController -Filter "CurrentHorizontalResolution>0")[0]
$width = $video.CurrentHorizontalResolution
$height = $video.CurrentVerticalResolution
Write-Host "Resolution: $width x $height"
$bitmap = New-Object System.Drawing.Bitmap $width,$height
$bitmap.Save('C:\TEMP\test.bmp')

Das wurde aber mit der Ausnahme bei New-Object quittiert, dass die Parameter ungültig sind. WTF? Es sind korrekte Werte drin, in meinem Fall 1920×1200…

Es stellt sich heraus, dass WMI für diese Werte ein unsigniertes Integer liefert (was ja bei Pixel-Abmessungen eines Bildschirms auch irgendwie sinnvoll ist), während der Objekt-Konstruktor „echte“ ganze Zahlen erwartet. PowerShell versucht an dieser Stelle keine Konvertierung, und schon kommt es zu einer Kollision. Mit

$width = [int]$video.CurrentHorizontalResolution 
$height = [int]$video.CurrentVerticalResolution

funktioniert es dann.
Happy bitmapping!

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*


Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.