Eu tenho uma instância de a System.Drawing.Bitmap
e gostaria de disponibilizá-la para meu aplicativo WPF na forma de a System.Windows.Media.Imaging.BitmapImage
.
Qual seria a melhor abordagem para isso?
Que tal carregá-lo do MemoryStream?
using(MemoryStream memory = new MemoryStream())
{
bitmap.Save(memory, ImageFormat.Png);
memory.Position = 0;
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memory;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
}
ms.Seek(0, SeekOrigin.Begin);
antes da configuraçãobi.StreamSource
. Estou usando o .NET 4.0.Graças a Hallgrim, aqui está o código que eu acabei com:
Também acabei vinculando um BitmapSource em vez de um BitmapImage como na minha pergunta original
fonte
DeleteObject
esse identificador.BitmapSizeOptions.FromEmptyOptions()
, e funciona bem para a minha situação.Eu sei que isso foi respondido, mas aqui estão alguns métodos de extensão (para .NET 3.0+) que fazem a conversão. :)
e a classe NativeMethods (para aplacar o FxCop)
fonte
Levei algum tempo para que a conversão funcionasse nos dois sentidos, então, aqui estão os dois métodos de extensão que eu criei:
fonte
A coisa mais fácil é se você pode criar o bitmap WPF diretamente de um arquivo.
Caso contrário, você terá que usar o System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap.
fonte
fonte
Você pode compartilhar os pixeldata entre os dois namespaces (Mídia e Desenho) escrevendo uma fonte de bitmaps personalizada. A conversão ocorrerá imediatamente e nenhuma memória adicional será alocada. Se você não deseja criar explicitamente uma cópia do seu Bitmap, este é o método que você deseja.
fonte
Eu trabalho em um fornecedor de imagens e escrevi um adaptador para WPF para o nosso formato de imagem que é semelhante a um System.Drawing.Bitmap.
Eu escrevi este KB para explicar aos nossos clientes:
http://www.atalasoft.com/kb/article.aspx?id=10156
E há código lá que faz isso. Você precisa substituir o AtalaImage pelo Bitmap e fazer a coisa equivalente que estamos fazendo - deve ser bem direto.
fonte
Minha opinião sobre isso foi construída a partir de vários recursos. https://stackoverflow.com/a/7035036 https://stackoverflow.com/a/1470182/360211
fonte
Eu vim para essa pergunta porque estava tentando fazer o mesmo, mas no meu caso o Bitmap é de um recurso / arquivo. Eu encontrei a melhor solução é como descrito no seguinte link:
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx
fonte