VB6之GIF分解

原文链接:http://hi.baidu.com/coo_boi/item/1264a64172fe8dec1f19bc08

 

还是找了个C++的翻译下,原文链接:http://www.360doc.com/content/05/1122/15/1894_34348.shtml

GDI+的函数声明 我就不放上了,网上有个做好的GDI+公共模块。

Private Declare Sub RtlZeroMemory Lib "kernel32" (dest As Any, ByVal numBytes As Long)
Private Declare Sub RtlMoveMemory Lib "kernel32" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private GifFramesDelay() As Long
Private Graphics As LongPrivate Sub Command1_Click()Dim hImage As LongDim Guid As ClsidDim dCount As LongDim fCount As LongDim pItem_() As ByteDim pSize As LongDim pDelay() As LongDim bmpCLSID As ClsidCall GdipLoadImageFromFile(StrPtr("d:\1.gif"), hImage)Guid = GetImageEncoderClsid(GIF)'bmpCLSID = GetImageEncoderClsid(BMP)Call GdipImageGetFrameDimensionsCount(hImage, dCount)Call GdipImageGetFrameDimensionsList(hImage, Guid, dCount)Call GdipImageGetFrameCount(hImage, Guid, fCount)If fCount > 1 ThenCall GdipGetPropertyItemSize(hImage, PropertyTagFrameDelay, pSize)ReDim pItem_(pSize - 1)ReDim GifFramesDelay(fCount - 1)Call RtlZeroMemory(ByVal VarPtr(pItem_(0)), pSize)Call GdipGetPropertyItem(hImage, PropertyTagFrameDelay, pSize, ByVal VarPtr(pItem_(0)))'这里我把最后一个参数的类型(PropertyItem)改成了Any,直接读内存方便些For i = 16 To pSize - 1 Step 4GifFramesDelay(j) = pItem_(i)j = j + 1NextFor i = 0 To fCount - 1Call GdipImageSelectActiveFrame(hImage, Guid, i)Call GdipDrawImage(Graphics, hImage, 0, 0)Call delay_(GifFramesDelay(i) * 10)'Call GdipSaveImageToFile(hImage, StrPtr("d:\" & i & ".bmp"), bmpCLSID, ByVal 0&)NextEnd IfCall GdipDisposeImage(hImage)
End SubPrivate Sub Form_Load()InitGDIPlusCall GdipCreateFromHDC(Form1.hdc, Graphics)
End SubPrivate Sub Form_Unload(Cancel As Integer)Call GdipDeleteGraphics(Graphics)TerminateGDIPlus
End SubPrivate Sub delay_(ByVal d As Long)Dim n As Longn = GetTickCount()Do Until n + d < GetTickCount()DoEventsLoop
End Sub

 

转载于:https://www.cnblogs.com/lichmama/p/4142682.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MindFusion Pack for ASP.NET发布v2013.R2

在MindFusion.Diagramming for WebForms中&#xff1a;导入OpenOffice Draw文件新的DrawImporter类允许你通过OpenOffice Draw Vector图形编辑器导入后缀为*.odg的文件。只需添加一个引用到MindFusion.Diagramming.Import.Draw.dll组即可。你还可以使用导入法的多种重载将OpenO…

python中的常量可以修改吗_python实现不可修改的常量

因为种种原因&#xff0c;Python并未提供如C/C/Java一样的const修饰符&#xff0c;换言之&#xff0c;python中没有常量&#xff0c;至少截止2015年年末&#xff0c;还没有这个打算。Python程序一般通过约定俗成的变量名全大写的形式来表示这是一个常量&#xff0c;但是这终究不…

字符串之数组中两个字符串的最小距离

题目: 给定一个字符串数组strs, 再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1和str2为null,或者不再strs中,都返回-1 列如: strs = {"1","3","3","2","3","1","3"} ,…

【翻译】C#表达式中的动态查询

当您使用LINQ来处理数据库时&#xff0c;这种体验是一种神奇的体验&#xff0c;对吗&#xff1f;你把数据库实体像一个普通的收集&#xff0c;使用Linq中像Where&#xff0c;Select或者 Take&#xff0c;这些简单的使用就能让代码可用了。但是&#xff0c;让我们考虑一下这里是…

SVD++:推荐系统的基于矩阵分解的协同过滤算法的提高

1.背景知识 在讲SVD之前&#xff0c;我还是想先回到基于物品相似的协同过滤算法。这个算法基本思想是找出一个用户有过正反馈的物品的相似的物品来给其作为推荐。其公式为&#xff1a; 其中 rui 表示预测用户u对物品i的喜爱程度。wij 是物品i&#xff0c;j之间的相似度&#xf…

资源文件(.RES)的应用

资源档有什麽用处呢&#xff1f;最重要的有两个地方1.国际发行&#xff1a;我们将Application中所有的文字从Resource用读取&#xff0c;那麽&#xff0c;只要更动 Resource档的内容&#xff0c;就可以用不同语言的方式来显示。2.管理资源&#xff1a;例如说&#x…

Linux下Tomcat设置自动启动

在linux系统下&#xff0c;设置某个服务自启动的话&#xff0c;需要在/etc/rcX.d下挂载&#xff0c;还要在/etc/init.d/下写启动脚本的。 1、我们在/etc/init.d/下新建一个文件tomcat&#xff08;需要在root权限下操作&#xff09; vi /etc/init.d/tomcat#!/bin/sh # chkconfig…

Android插件化开发之动态加载的类型

https://segmentfault.com/a/1190000005113493 基本信息 Author&#xff1a;kaedea GitHub&#xff1a;android-dynamical-loading 现在网络上有许多关于动态加载的介绍的文章&#xff0c;谈及的关键词汇有动态加载、插件化、热部署、热修复等&#xff0c;对于一些刚接触这方…

c# 爬虫 -ChromeDriver+HtmlAgilityPack爬取比赛实时比分

背景最近NBA总决赛吸引了不少球迷&#xff0c;但是因为时差的关系&#xff0c;人家在比赛&#xff0c;我们在上班&#xff0c;有时候上班又不好意思光明正大的看比赛&#xff0c;那有什么办法 可以光明正大的看又不被发现呢。有&#xff0c;自己动手丰衣足食&#xff0c;Chrome…

Codevs2157 配对

题目描述 Description给出2个序列A{a[1]&#xff0c;a[2]&#xff0c;…&#xff0c;a[n]}&#xff0c;B{b[1]&#xff0c;b[2]&#xff0c;…&#xff0c;b[n]}&#xff0c;从A、B中各选出n个元素进行一一配对&#xff08;可以不按照原来在序列中的顺序&#xff09;&#xff0…

UITableView的优化原理

2019独角兽企业重金招聘Python工程师标准>>> 当我们下啦一个 UITableView时&#xff0c;如果没有做优化&#xff0c;只是简单的实现功能代码如下&#xff0c;这样当我们有上百条tableviewcell的时候&#xff0c;我们滑动的非常快时会非常费内存&#xff0c;当然苹果…

深入浅出Mybatis系列(一)---Mybatis入门[转]

最近两年 springmvc mybatis 的在这种搭配还是蛮火的&#xff0c;楼主我呢&#xff0c;也从来没真正去接触过mybatis, 趁近日得闲&#xff0c; 就去学习一下mybatis吧。 本次拟根据自己的学习进度&#xff0c;做一次关于mybatis 的一系列教程&#xff0c; 记录自己的学习历程&…

字符串之括号的有效性

题目: 给定一个字符串str,判断是不是整体有效的括号字符串 举例: str = "()" return true; stre = "()()" return true; str = "())" return false; str = "()a()" return false; 代码: package com.chenyu.string.cn;public class…

python为text添加滚动条_在Tkinter中向一组小部件添加滚动条

概述您只能将滚动条与一些小部件关联起来&#xff0c;根小部件和Frame不是那组小部件的一部分。最常见的解决方案是创建一个画布小部件&#xff0c;并将滚动条与该小部件关联起来。然后&#xff0c;将包含标签小部件的框架嵌入到画布中。确定框架的宽度/高度&#xff0c;并将其…

C# 图像模板匹配并标注

01—需求这个是粉丝在我的技术群提的一个需求1、 模板匹配 &#xff1a;功能&#xff1a;&#xff08;1&#xff09;在一张大图像中&#xff0c;选取一小块区域作为模板&#xff08;2&#xff09;可在大图像中匹配到模板图像和位置。模板匹配是图像处理中最基本、最常用的匹配方…

深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]

上篇《深入浅出Mybatis系列&#xff08;七&#xff09;---mapper映射文件配置之insert、update、delete》介绍了insert、update、delete的用法&#xff0c;本篇将介绍select、resultMap的用法。select无疑是我们最常用&#xff0c;也是最复杂的&#xff0c;mybatis通过resultMa…

李洪强经典面试题146-网络

李洪强经典面试题146-网络 网络 http请求方式&#xff1f; 通常&#xff0c;HTTP的请求方式有3种&#xff0c;分别是&#xff1a;POST、GET、HEAD。POST和GET方法是用于数据发送的。 POST&#xff1a;它将要发送的数据单独放在一个流中进行发送&#xff0c;而不是附加在URL地址…

北大保送、硕博连读!《西游记》红孩儿扮演者现成中科院博士!

全世界只有3.14 % 的人关注了爆炸吧知识本文转自&#xff1a;募格学术86版《西游记》可以说是很多人的记忆&#xff0c;男女老幼几乎都看过这个版本&#xff0c;虽然已经过去三十多年&#xff0c;但如今依旧是经典无法超越之作。看过86版《西游记》的小伙伴应该都还记得里面牛魔…