Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] System.Drawing2D при изменение размера изображения получается полупрозрачный край (http://forum.oszone.net/showthread.php?t=348094)

Vandheer 25-02-2021 13:43 2951247

System.Drawing2D при изменение размера изображения получается полупрозрачный край
 
Привет. При изменении размера изображения средствами System.Drawing.Drawing2D на выходе у изображения получается полупрозрачный край в толщину в 1 пиксель. Как не допустить появления этой кромки?



Черновик кода:
Код:

[Reflection.Assembly]::LoadFrom( (Resolve-Path (".\TagLibSharp.dll"))) | Out-Null


$Song = [TagLib.File]::Create((resolve-path ".\input\Moon Lights.flac"))
[TagLib.IPicture[]]$Pictures = $Song.Tag.Pictures

$bmp = New-Object  IO.MemoryStream

$targetSize = 1280
$Quality= 100
 
$img = [System.Drawing.Image]::FromStream([IO.MemoryStream]$Pictures[0].Data.data)

  $CanvasWidth = $targetSize
    $CanvasHeight = $targetSize

    #Encoder parameter for image quality
    $EncoderParam = [System.Drawing.Imaging.Encoder]::Quality
    $EncoderParamSet = New-Object System.Drawing.Imaging.EncoderParameters(1)
    $EncoderParamSet.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter($EncoderParam, $Quality)


    # get codec
    $Codec = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where{$_.MimeType -eq 'image/jpeg'}

    #compute the final ratio to use
    $ratioX = $CanvasWidth / $img.Width;
    $ratioY = $CanvasHeight / $img.Height;

    $ratio = $ratioY
    if ($ratioX -le $ratioY) {
        $ratio = $ratioX
    }

    $newWidth = [int] ($img.Width * $ratio)
    $newHeight = [int] ($img.Height * $ratio)

    $bmpResized = New-Object System.Drawing.Bitmap($newWidth, $newHeight)
    $graph = [System.Drawing.Graphics]::FromImage($bmpResized)
    $graph.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic

    $graph.Clear([System.Drawing.Color]::White)
    $graph.DrawImage($img, 0, 0, $newWidth, $newHeight)

    #save to file
    $bmpResized.Save($bmp, $Codec, $EncoderParamSet)

    $bmpResized.Dispose()
    $img.Dispose()

    $byte_vec = New-Object -TypeName TagLib.ByteVector -ArgumentList $bmp.ToArray()
    $picture = New-Object -TypeName TagLib.Picture -ArgumentList $byte_vec

    $Pictures[0]=$picture

    $song.Tag.Pictures=$Pictures

    $song.Save()



Время: 10:20.

Время: 10:20.
© OSzone.net 2001-