将位图转换为图像 [英] Convert Bitmap to Image
问题描述
所以,当我从DLL中拖出图像并将其放入图像控件中时,它是一个BitmapImage。要将其打包成dll,它必须转换回图像。如何将其转换成图像,如何将其重新包装到dll中?这个都是用c#编写的wpf。
So after I pull an image out of DLL and put it into an image control it is a BitmapImage. To package it back into the dll it has to be converted back to an image. How can I convert it back to image and how can i repackage it back into the dll? This is all in wpf written in c#.
private void compileDLL_Click(object sender, RoutedEventArgs e)
{
string sourcePath = Directory.GetCurrentDirectory() + "\\PCAngelResources.dll";
//destination path
string dllname = textBox1.Text + "_PCAngelResources.dll";
string targetPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string destFile = System.IO.Path.Combine(targetPath, dllname);
System.IO.File.Copy(sourcePath, destFile, true);
//lstImages = new Dictionary<string, Bitmap>();
//string filename = "PCAngelResources.dll";
Assembly pcangdll = Assembly.LoadFile(sourcePath);
System.Globalization.CultureInfo culture = Thread.CurrentThread.CurrentCulture;
ResourceManager rm = new ResourceManager("PCAngelResources.DynResources", pcangdll);
rs = rm.GetResourceSet(culture, true, true);
ResourceWriter writer = new ResourceWriter(destFile);
foreach (DictionaryEntry resource in rs)
{
resources.Add((string)resource.Key);
if (resource.Key.Equals("Branding") || resource.Key.Equals("Advertising"))
{
if (resource.Key.Equals("Branding"))
{
writer.AddResource("Branding", image5.Source);
//System.Object obj = rm.GetObject((string)resource.Key);
//lstImages.Add((string)resource.Key, (Bitmap)obj);
}
else
if (resource.Key.Equals("Advertising"))
{
writer.AddResource("Advertising", image6.Source);
}
}
}
writer.Generate();
System.Windows.MessageBox.Show("Done", "Process Finished", MessageBoxButton.OK, MessageBoxImage.Asterisk, MessageBoxResult.OK);
}
当我做writer.Generate()来创建新的dll,我得到以下错误:
mscorlib.dll中出现类型为System.Runtime.Serialization.SerializationException的未处理异常。
When I do writer.Generate() to make the new dll I get the following error: An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll
附加信息:键入System.Windows。 Media.Imaging.BitmapFrameDecode'在Assembly'PresentationCore,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'未标记为可序列化。
Additional information: Type 'System.Windows.Media.Imaging.BitmapFrameDecode' in Assembly 'PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable.
推荐答案
我不知道你的意思是将其重新包装回到DLL,但有一个简单的方法将WPF图像从BitmapSource转换回System.Drawing.Image。以下方法实现:
I don't know what you mean by "repackage it back into the DLL" but there is an easy way to convert a WPF image from a BitmapSource back into a System.Drawing.Image. The following method accomplishes that:
/// <summary>
/// Converts a WPF bitmap to a System.Drawing.Bitmap
/// </summary>
/// <param name="wpfBitmap">BitmapSource to convert</param>
/// <returns>A GDI Bitmap</returns>
public static System.Drawing.Bitmap GdiBitmapFromWpfBitmap(BitmapSource wpfBitmap)
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(wpfBitmap));
MemoryStream imageStream = new MemoryStream();
encoder.Save(imageStream);
System.Drawing.Bitmap gdiBitmap = new System.Drawing.Bitmap(imageStream);
imageStream.Close();
imageStream.Dispose();
return gdiBitmap;
}
这篇关于将位图转换为图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!