Redimensionar a imagem em VB.NET sem XAML


Você quer redimensionar a imagem, mantendo a relação de aspecto em uma classe VB.NET WPF? Esta classe inspecciona a imagem para verificar se a largura ou a altura é maior, então utiliza o por cento maior do que o redimensionamento.

Em seguida, comparar a imagem original para o monitor DPI DPI, e calcula o novo tamanho do pixel. Em seguida, retorna a nova Imagesource. Eu usei PNG porque tem uma pequena sobrecarga de memória e suporta transparência. Você pode escolher qualquer codificador que você quer de qualquer maneira.




Função Pública ResizeImage (ByVal Como ImageSource ImageSource, ByVal MaxSize como Size) Como ImageSource Se ImageSource é nada Então Sem retorno End If "Primeiro nós encontramos o maior fosso entre o tamanho da imagem original e o tamanho máximo. Dim paWidth As Double = ImageSource.Width - MaxSize.Width Dim paHeight As Double = ImageSource.Height - MaxSize.Height Dim ShrinkPercent As Double = 0,0 "Calcular a quantidade de compactado usando a maior quantidade de altura ou largura. Em seguida, obter a percentagem de retirada. Se paHeight> Então paWidth ShrinkPercent = ImageSource.Height/MaxSize.Height ElseIf paWidth> Então paHeight ShrinkPercent = ImageSource.Width/MaxSize.Width End If '*** Linhas Uncomment depuração para ver como é feita a conversão. *** 'Debug.WriteLine ("A porcentagem de encolhimento é:" & ShrinkPercent) 'Debug.WriteLine ("O novo formato é proposto:" & ImageSource.Width/ShrinkPercent e "x" e ImageSource.Height/ShrinkPercent) 'Cópia em profundidade a imagem para que você possa criar um novo. Scr Dim = CType (ImageSource, BitmapImage) Fluxo Dim como novo MemoryStream Encoder Dim como novo PngBitmapEncoder encoder.Frames.Add (BitmapFrame.Create (ImageSource)) encoder.Save (stream) stream.Flush () "Carregar o arquivo de dados a partir da cópia de profundidade. ImageBytes Dim As Byte () = stream.ToArray "Isto não é necessário. Eu usá-lo para ver o que as configurações de DPI para o monitor são neste momento. Dim x As New BitmapImage x.BeginInit () stream.Seek (0, IO.SeekOrigin.Begin) x.StreamSource = fluxo x.EndInit () "Usando a imagem temporária referido configurações acima e o DPI da fonte. I criar uma nova imagem. 'ImageSource.Width/ShrinkPercentage = quantos pixels para subtrair a largura da imagem 'Scr.DpiY/x.DpiY = A imagem pode ter um DPI diferente, por isso usamos isso para converter ao PPE que estamos usando. "Observe o 'x' é uma imagem temporária que eu criei. Você pode usar 96 em vez disso. O Windows usa isso para cegamente está se pondo. Dim imagesrc Como BitmapSource = createImage (imageBytes, _ (ImageSource.Width/ShrinkPercent) * (scr.DpiY/x.DpiY), _ (ImageSource.Height/ShrinkPercent) * (scr.DpiX/x.DpiX)) 'Debug.WriteLine ("a imagem em tamanho Criado:" & imageSrc.Width e "x" e imageSrc.Height) 'Debug.WriteLine ("Criado tamanho Pixel Image:" & imageSrc.PixelWidth e "x" e imageSrc.PixelHeight) Voltar imagesrc End Function 'A função a seguir foi feita a partir da web. Desculpe, esqueci a fonte. A função privada createImage (ByVal imageData As Byte (), ByVal DecodePixelWidth As Integer, ByVal decodePixelHeight As Integer) Como BitmapSource Se imageData é nada Então Sem retorno End If Dim resultado como novo BitmapImage () result.BeginInit () Se DecodePixelWidth> 0 Then result.DecodePixelWidth = DecodePixelWidth End If Se decodePixelHeight> 0 Then result.DecodePixelHeight = decodePixelHeight End If result.StreamSource = New MemoryStream (imageData) result.CreateOptions = BitmapCreateOptions.None result.CacheOption = BitmapCacheOption. [Default] result.EndInit () Resultado Retorno End Function

(0)
(0)
Próximo artigo Drogas Hipertensão

Comentários - 0

Sem comentários

Adicionar um comentário

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caracteres restantes: 3000
captcha