[VB]GDI+ IStream、StdPicture、Byte() 互转

很多年前就想做一个远程控制的软件,只是一直以来图片的压缩速度总是提升不上去,而我也参考过很多网上的关于图片压缩的例子,比如zyl910的GIF_LZW压缩方法,Huffman压缩方法,以至到GDI+的直接生成JPG、PNG的方法(这种方法无论从压缩率和速度上都是最佳的,可惜这种方法网上一直没找到直接保存为Byte()的例子,见得最多的例子就是用GdipSaveImageToFile保存到磁盘,然后再读取发送了,但是我做的可是远程控制软件,每秒不知道要写多少M的数据进磁盘!),近来在偶然机会重新拾起了完成这个程序的念头,而且很巧的是搜索到了Modest的《VB6结合GDI+实现内存(Stream)压缩/解压缩JPG(JPEG)图像》,这篇文章给了我很大的启发,在此感谢Modest!!!

Modest的代码已经实现了StdPicture和IStream的互转,我另外使用了GlobalAlloc、GlobalLock、GlobalUnlock、GlobalFree等函数创建一个缓冲区(指针为hGlobal),将Modest代码中CreateStreamOnHGlobal(ByVal 0&, False, picStream)改成CreateStreamOnHGlobal(ByVal hGlobal, False, picStream),这样我便可根据hGlobal来读写picStream的内容了,具体代码如下:

若要把Byte()转化为StdPicture,我的方法是先用CreateStreamOnHGlobal把Byte()转化为IStream,然后再调用Modest代码里面的StreamToPicture函数最终转化为StdPicture,具体代码如下:

  

 

完整的模块代码如下(包括Modest的代码):

如果要测试,可以把以上代码保存成一个模块,然后创建一个新的窗体,放置一个Picture1(加载一张图片)、一个Picture2(留空白)、一个Command1,粘贴以下代码:

 

使用代码前请先引用IStream.tlb,下载地址:http://mitglied.lycos.de/real51/directdl.php?file=IStream.zip

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
在 C++ 中使用 GDI+ 加载图片,可以使用 pBitmap 类的 From 方法。From 方法有以下几种重载形式: 1. FromFile 从文件中加载图片,参数为文件名。 ```cpp static Bitmap* FromFile( const WCHAR* filename, BOOL useEmbeddedColorManagement = FALSE ); ``` 2. FromStream 从流中加载图片,参数为流对象指针。 ```cpp static Bitmap* FromStream( IStream* stream, BOOL useEmbeddedColorManagement = FALSE ); ``` 3. FromStreamICM 从流中加载图片,并使用内嵌的颜色管理信息(ICM),参数为流对象指针。 ```cpp static Bitmap* FromStreamICM( IStream* stream ); ``` 4. FromResource 从资源中加载图片,参数为包含图片数据的 HINSTANCE、资源 ID 和资源类型。 ```cpp static Bitmap* FromResource( HINSTANCE hInstance, LPCWSTR lpBitmapName ); ``` 5. FromResourceEx 从资源中加载图片,并指定图片的类型,参数为包含图片数据的 HINSTANCE、资源 ID、资源类型和 ImageType 枚举值。 ```cpp static Bitmap* FromResourceEx( HINSTANCE hInstance, LPCWSTR lpBitmapName, ImageType type ); ``` 6. FromHICON 从图标句柄中加载图片,参数为图标句柄。 ```cpp static Bitmap* FromHICON( HICON hIcon ); ``` 7. FromGdiplusImage 从 GDI+ 图片对象中加载图片,参数为 GDI+ 图片对象指针。 ```cpp static Bitmap* FromGdiplusImage( const Image* image ); ``` 在加载完图片后,可以通过 Bitmap 类来操作图片。在使用完后,需要释放 Bitmap 对象的内存。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值