Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] System.Drawing2D при изменение размера изображения получается полупрозрачный край

Ответить
Настройки темы
Разное - [решено] System.Drawing2D при изменение размера изображения получается полупрозрачный край

Аватара для Vandheer

Старожил


Сообщения: 221
Благодарности: 32

Профиль | Отправить PM | Цитировать


Привет. При изменении размера изображения средствами 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()

Отправлено: 13:43, 25-02-2021

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] System.Drawing2D при изменение размера изображения получается полупрозрачный край

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
IPB v3.4.6 - Автоматическое изменение размера изображения в процентном соотношении JimmOnLine Вебмастеру 0 27-08-2015 06:19
Разное - Изменение размера изображения альбома в Windows Media 12 kikos06 Оформление Windows 11/ 10 / 8 / 7 / Vista 1 19-06-2011 13:14
Изменение размера изображения с помощью PHP. котвася Вебмастеру 1 19-12-2010 23:06
Установка - Изменение размера диска при установке XP mihan81 Microsoft Windows 2000/XP 7 26-09-2009 07:19
полупрозрачный фон с повторением фонового изображения Vlad Drakula Вебмастеру 7 18-03-2006 11:28




 
Переход