Pesquisar

Salvando imagens em alta qualidade

Eis aqui um exemplo de como salvar as imagens geradas manualmente atraves do objeto graphics em alta qualidade.

Primeiramente devemos configurar alguma propriedades do objeto graphics, por default as configurações do System.Drawing são para velocidade e não para qualidade de imagens, por isso devemos configurar as propriedades.

_ImagemPrincipal.SetResolution(_ResolucaoImagem,_ResolucaoImagem)
_Grafico = Graphics.FromImage(_ImagemPrincipal)
_Grafico.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
_Grafico.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
_Grafico.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
_Grafico.CompositingQuality = Drawing2D.CompositingQuality.HighQuality

Na hora de salvar devemos configurar algumas propriedades do codec escolhido, neste caso o JPG, devemos setar o fator de qualidade do codec.

Private Sub SalvaFotoPrincipal()
Dim fileName As String = "ImagemQualidadeAlta.jpg"

fileName = novoName
fileName = IO.Path.Combine(_PastaParaSalvar, fileName)

Dim info() As Drawing.Imaging.ImageCodecInfo = Drawing.Imaging.ImageCodecInfo.GetImageEncoders()
Dim params As New Drawing.Imaging.EncoderParameters(1)

//Adicionando parametro de qualidade para o formato jpg, deixando em 100% ou seja com compactação minima e qualidade maxima.
params.Param(0) = New Drawing.Imaging.EncoderParameter(Drawing.Imaging.Encoder.Quality, 100L)
//Busco as informações do codec JPG.
Dim myImageCodecInfo As Imaging.ImageCodecInfo = GetEncoderInfo(Drawing.Imaging.ImageFormat.Jpeg)

// Salvando a imagen passando os parametros.
_ImagemPrincipal.Save(fileName, myImageCodecInfo, params)
_ImagemPrincipal.Dispose()
End Sub

Private Shared Function GetEncoderInfo(ByVal format As Imaging.ImageFormat) As Imaging.ImageCodecInfo
Dim j As Integer
Dim encoders() As Imaging.ImageCodecInfo
encoders = Imaging.ImageCodecInfo.GetImageEncoders()

j = 0
While j < encoders.Length
If encoders(j).FormatID = format.Guid Then
Return encoders(j)
End If
j += 1
End While
Return Nothing

End Function

Ate mais.
Espero ter ajudado.

Nenhum comentário: