正如建议的@马蒂亚斯·R·杰森 https://stackoverflow.com/users/712649/mathias-r-jessen我使用了一个函数,所以它看起来更优雅:
Add-Type -AssemblyName System.Drawing
$Username="Steve"
$bmp=new-object System.Drawing.Bitmap 64,64
$graphics=[System.Drawing.Graphics]::FromImage($bmp)
$src=[System.Drawing.Image]::FromFile("$pwd\$Username.png")
$units = [System.Drawing.GraphicsUnit]::Pixel
function DrawCroppedImage {
param( [int]$srcX, [int]$srcY, [int]$srcWidth, [int]$srcHeight, [int]$destX, [int]$destY, [int]$destWidth, [int]$destHeight )
$destRect = new-object Drawing.Rectangle $destX, $destY, $destWidth, $destHeight
$srcRect = new-object Drawing.Rectangle $srcX, $srcY, $srcWidth, $srcHeight
$graphics.DrawImage($src, $destRect, $srcRect, $units)
}
DrawCroppedImage 8 0 8 8 8 0 8 8
$graphics.Dispose()
$bmp.Save("$pwd\1.png")
因此我可以重复它,而无需为每种作物再次重写所有代码。我想补充一个事实,如果你缩放它(最后两个整数= 16),但你想在没有任何插值的情况下进行它,你可以使用相同的函数,但多了两行:
function DrawCroppedImage {
param( [int]$SrcX, [int]$SrcY, [int]$SrcWidth, [int]$SrcHeight, [int]$DestX, [int]$DestY, [int]$DestWidth, [int]$DestHeight )
$DestRect = new-object Drawing.Rectangle $DestX, $DestY, $DestWidth, $DestHeight
$SrcRect = new-object Drawing.Rectangle $SrcX, $SrcY, $SrcWidth, $SrcHeight
//these two
$graphics.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::NearestNeighbor
$graphics.PixelOffsetMode = [System.Drawing.Drawing2D.PixelOffsetMode]::Half
}
发现通过这个线程 https://stackoverflow.com/questions/11456440/how-to-resize-a-bitmap-image-in-c-sharp-without-blending-or-filtering