图片资源相互转换

49 篇文章 13 订阅

1、System.Drawing.Bitmap 转换 System.Windows.Media.ImageSource (Bitmap => ImageSource)

#region Change Bitmap To ImageSource
    [System.Runtime.InteropServices.DllImport("gdi32.dll", SetLastError = true)]

    private static extern bool DeleteObject(IntPtr hObject);

    public static System.Windows.Media.ImageSource ChangeBitmapToImageSource(System.Drawing.Bitmap bitmap)
    {
        IntPtr hBitmap = bitmap.GetHbitmap();
        System.Windows.Media.ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
            hBitmap,
            IntPtr.Zero,
            System.Windows.Int32Rect.Empty,
            System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

        if (!DeleteObject(hBitmap))//注意内存的释放,否则内容持续增大,导致内存不足
        {
            throw new System.ComponentModel.Win32Exception();
        }
        return wpfBitmap;

    }
    #endregion

2、String path => ImageSource

private static object lockObj = new object();
public static ImageSource BitmapFromFileWithCache(String source)
{
	var bitmap = new BitmapImage();
	try
	{
		if (System.IO.File.Exists(source))
		{
			using (Stream stream = System.IO.File.OpenRead(source))
			{
				if (stream != null)
				{
					lock (lockObj)
					{
						bitmap.BeginInit();
						bitmap.StreamSource = stream;
						bitmap.CacheOption = BitmapCacheOption.OnLoad;
						bitmap.EndInit();
						stream.Dispose();//释放占用的资源
					}
				}
			}
		}
	}
	catch (Exception ex)
	{

	}
	return bitmap;
}

3、Uri => ImageSource

private static object lockObj = new object();
public static ImageSource BitmapFromUri(Uri source)
{
	var bitmap = new BitmapImage();
	try
	{
		var temp = new BitmapImage(source);
		temp = null;
		lock (lockObj)
		{
			bitmap.BeginInit();
			bitmap.UriSource = source;
			bitmap.CacheOption = BitmapCacheOption.OnLoad;
			bitmap.EndInit();
		}
	}
	catch { }
	return bitmap;
}

4、Stream => ImageSource

private static object lockObj = new object();
public static ImageSource BitmapFromFileWithCache(Stream stream)
{
    var bitmap = new BitmapImage();
    try
    {
        if (stream != null)
        {
            lock (lockObj)
            {
                bitmap.BeginInit();
                bitmap.StreamSource = stream;
                bitmap.CacheOption = BitmapCacheOption.OnLoad;
                bitmap.EndInit();
                stream.Dispose();//释放占用的资源
            }
        }
    }
    catch (Exception ex)
    {

    }
    return bitmap;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pb动态库是一种程序库,它是一组可执行代码和数据,用于支持软件应用程序的运行和功能实现。pb动态库的特点是可以在程序运行时动态加载和链接,从而可以实现插件化开发和功能扩展。 imgdll是一种用于图片格式转换的动态链接库。它可以提供各种图片格式之间的转换和处理功能,例如将JPEG格式转换为PNG格式,或者将BMP格式转换为GIF格式等。imgdll库通常会提供一系列的函数接口,供软件开发者调用,实现图片格式的转换和处理。 使用imgdll库进行图片格式转换的步骤通常如下: 1. 引入imgdll库的相关头文件和链接库。 2. 调用库提供的函数接口,传入需要转换图片文件路径和目标格式参数。 3. 等待函数执行完成,并获取转换后的图片文件路径或内存数据。 4. 可选地,对转换后的图片进行进一步处理或保存。 虽然以上是一个简化的步骤示例,但实际开发中可能还涉及其他参数设置、错误处理等。通过使用pb动态库,我们可以方便地调用imgdll库中的功能,减少代码重复开发,提高开发效率。 ### 回答2: Pb动态库是一种用于Pb编程语言的库文件,它包含了许多可重用的函数和过程,可以帮助开发者简化程序的开发过程。通过引用Pb动态库,开发者可以在程序中使用这些函数和过程,提高开发效率和代码重用性。 imgdll是一个用于图片格式转换的动态链接库。它提供了各种图片格式之间的转换功能,能够帮助开发者在程序中实现图片格式之间的互相转换。例如,可以将一张PNG格式的图片转换为JPEG格式,或者将一张BMP格式的图片转换为GIF格式。这样的功能对于一些需要处理大量图片的应用程序非常有用,比如图片编辑软件、图片批量处理工具等。 使用imgdll进行图片格式转换通常的步骤包括以下几个: 1. 导入imgdll库:在Pb程序中引入imgdll库,以便能够使用其中的函数和过程。 2. 载入源图片:使用imgdll库中的函数将源图片载入到程序中。 3. 设定转换参数:根据需要,使用imgdll库中的函数设定转换的参数,比如目标图片格式、转换质量等。 4. 执行转换:使用imgdll库中的函数执行图片格式转换操作。 5. 保存转换结果:将转换后的图片保存到指定路径。 通过imgdll库提供的函数和过程,开发者可以方便地将不同格式的图片进行转换,满足各种需求。同时,由于imgdll是一个动态链接库,可以使得程序的大小更加精简,并且减少了代码重复的情况,提高了程序的可维护性和可扩展性。 ### 回答3: pb动态库,也称为动态链接库(Dynamic Link Library),是一种在Windows操作系统中常用的共享库文件形式,其中包含了许多可被应用程序调用的函数和资源。 imgdll是一个用于图片格式转换的动态库。图片格式有许多种,例如JPEG、PNG、BMP等,每种格式都有不同的特点和用途。有时候我们需要将图片从一种格式转换成另一种格式,这时候就可以利用imgdll来实现。 使用imgdll,我们可以通过调用其提供的函数来完成不同格式图片转换。它提供了一系列的接口,包括图片格式的检测、加载、保存等操作。比如,我们可以调用其接口函数来判断一张图片的格式类型,然后再根据需要选择合适的格式进行转换。通过传入源图片和目标格式作为参数,imgdll可以将图片进行格式转换,并保存为目标格式的文件。 使用imgdll的好处在于,它能够让我们的应用程序在不同的图片格式之间进行灵活的转换,而不需要我们自己编写复杂的转换算法。同时,由于imgdll是一个动态库,它可以被多个应用程序共享使用,大大节省了系统资源的消耗。 总之,pb动态库是一种常用的共享库形式,而imgdll则是一个用于图片格式转换的动态库。通过调用imgdll提供的接口函数,我们可以方便地实现不同格式图片转换,使应用程序具有更高的灵活性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值