一个取图片尺寸的类,支持jpg,gif,png

'I have released this source code into the public domain. You may use it
'with no strings attached.
'Just call GetImageSize with a string containing the filename, and
'it will return a user defined type 'ImageSize' (see below)
'Return values of 0 indicate an error of some sort. The error handling
'in this module is limited. There is *NO* error handling on the test
'form. This routine is limited to X or Y sizes of 32767 pixels, but that
'should not be a problem.

'Check back athttp://www.qtm.net/~davidc
'I may add support for more file types.

'supported in this version:
'JPEG
'GIF
'PNG

'This routine does not require any royalty fees for Unisys as it
'does nothing with the compressed part of GIF files. It simply reads
'4 bytes to determine image size.

Option Explicit
Public WImg As Long
Public HImg As Long
Public Type ImageSize
Width As Long
Height As Long
End Type

Public Sub GetImageSize(sFileName As String)
On Error Resume Next 'you'll want to change this
Dim iFN As Integer
Dim bTemp(3) As Byte
Dim lFlen As Long
Dim lPos As Long
Dim bHmsb As Byte
Dim bHlsb As Byte
Dim bWmsb As Byte
Dim bWlsb As Byte
Dim bBuf(7) As Byte
Dim bDone As Byte
Dim iCount As Integer

lFlen = FileLen(sFileName)
iFN = FreeFile
Open sFileName For Binary As iFN
Get #iFN, 1, bTemp()

'PNG file
If bTemp(0) = &H89 And bTemp(1) = &H50 And bTemp(2) = &H4E _
And bTemp(3) = &H47 Then
Get #iFN, 19, bWmsb
Get #iFN, 20, bWlsb
Get #iFN, 23, bHmsb
Get #iFN, 24, bHlsb
'GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
'GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
WImg = CombineBytes(bWlsb, bWmsb)
HImg = CombineBytes(bHlsb, bHmsb)
End If

'GIF file
If bTemp(0) = &H47 And bTemp(1) = &H49 And bTemp(2) = &H46 _
And bTemp(3) = &H38 Then
Get #iFN, 7, bWlsb
Get #iFN, 8, bWmsb
Get #iFN, 9, bHlsb
Get #iFN, 10, bHmsb
'GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
'GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
WImg = CombineBytes(bWlsb, bWmsb)
HImg = CombineBytes(bHlsb, bHmsb)
End If

'JPEG file
If bTemp(0) = &HFF And bTemp(1) = &HD8 And bTemp(2) = &HFF Then
Debug.Print "JPEG"
lPos = 3
Do
Do
Get #iFN, lPos, bBuf(1)
Get #iFN, lPos + 1, bBuf(2)
lPos = lPos + 1
Loop Until (bBuf(1) = &HFF And bBuf(2) <> &HFF) Or lPos > lFlen

For iCount = 0 To 7
Get #iFN, lPos + iCount, bBuf(iCount)
Next iCount
If bBuf(0) >= &HC0 And bBuf(0) <= &HC3 Then
bHmsb = bBuf(4)
bHlsb = bBuf(5)
bWmsb = bBuf(6)
bWlsb = bBuf(7)
bDone = 1
Else
lPos = lPos + (CombineBytes(bBuf(2), bBuf(1))) + 1
End If
Loop While lPos < lFlen And bDone = 0
'GetImageSize.Width = CombineBytes(bWlsb, bWmsb)
'GetImageSize.Height = CombineBytes(bHlsb, bHmsb)
WImg = CombineBytes(bWlsb, bWmsb)
HImg = CombineBytes(bHlsb, bHmsb)
End If
Close iFN

End Sub
Private Function CombineBytes(lsb As Byte, msb As Byte) As Long
CombineBytes = CLng(lsb + (msb * 256))
End Function

时间: 2024-12-29 07:53:56

一个取图片尺寸的类,支持jpg,gif,png的相关文章

介绍一个增强的数据库类CDataSet

因为MFC完全支持数据库应用程序的开发,所以大多数数据库应用都使用CDatabase和CRecordset类,并且类向导(Class Wizard)提供了快速简易的方式来使用这两个类.有一点不足的就是当应用程序涉及到多表数据库时,类向导将产生大量的关于记录集的源码文件使得工程给人的感觉很臃肿混乱. 本文介绍如何使用一个模板记录集类来降低类向导所产生的记录集文件的数量,同时增强记录集类(CRecordset)的功能.这个模板记录集类叫做:CDataSet.它的主要目的是降低代码量,为数据对象数组提

一个UBB的PHP类

/*Text Encode ClassWrite by q3boy 2003.3.10usage:$eq = new EncodeQ3boy($str);初始化类//以下为ubbEncode参数$eq->url = true; //启用url自动解析 默认false$eq->html = true; //启用HTML编码(处理<,>,全角/半角空格,制表符,换行符)默认true$eq->image = true; //启用图象标签解析 默认true$eq->font =

PHP 下载远程文件类(支持断点续传)

PHP 下载远程文件类,支持断点续传下载,代码内含有具体的调用说明.程序主要是使用 HTTP 协议下载文件,HTTP1.1协议必须指定文档结束后关闭链接,否则读取文档时无法使用feof判断结束,可以有两种使用方法,具体请下载查看源码. <?php /** * 下载远程文件类支持断点续传 */ class HttpDownload { private $m_url = ""; private $m_urlpath = ""; private $m_scheme

MFC写的一个视频显示控件类,无法复用显示两路视频

问题描述 MFC写的一个视频显示控件类,无法复用显示两路视频 刚学MFC,仿照实例写了一个视频显示的控件类,SubDlgView ,这个类UI界面只有一个picture control,接口就是一个IP地址,在CAMDlg.h 里面定义两个私有成员SubDlgView videoDisplay2; SubDlgView videoDisplay; 但是显示的时候总是只能再第二个显示的控件中显示视频?不知道为什么 解决方案 控件只支持一个视频显示吧 做两个进程呢 解决方案二: 一个简单的验证方法,

在C#的资源管理器中,把所有form统一放在一个文件夹里,类统一放在一个文件夹里,form调用class时出错

问题描述 我有一个解决方案名为"ERP",我在根目录里建了一个文件夹"AllMyClass",然后在文件"AllMyClass"里新建一个操作数据库的类"LinkDataBase",然后我又在根目录里新建一个文件夹"AllMyForm",在"AllMyForm"里面新建一个登录窗体"FrmLogin"|--AllMyClass|--LinkDataBase.cs|--

PHP水印类,支持添加图片、文字、填充颜色区域的实现

*自己整理的一个水印类* 支持添加图片.文字.填充颜色区域 <?php /** * 图片加水印类,支持文字水印.透明度设置.自定义水印位置等. * 使用示例: * $obj = new WaterMask($imgFileName); //实例化对象 * $obj->$waterType = 1; //类型:0为文字水印.1为图片水印 * $obj->$transparent = 45; //水印透明度 * $obj->$waterStr = 'icp.niufee.com'; /

游戏2 游戏编程-DIRECT 3d 的2D 编程 这本书折覆餗的一个问题,检查是否支持窗口渲染,出错

问题描述 DIRECT 3d 的2D 编程 这本书折覆餗的一个问题,检查是否支持窗口渲染,出错 我看这本书学习的,前面都可以,也是完全按照书来学习的,到这步,书上有一段检查 是否支持窗口渲染的程序,我编译却是错误: g_caps.Caps2&D3DCAPS2_CANRENDERWINDOWED 提示 这个宏没有定义, 书是DX8 我用DX9,我问下是否不是宏 变了,还是成员变了,请帮帮忙了.

java-为什么不可能创建一个继承OnTouchListener的类?

问题描述 为什么不可能创建一个继承OnTouchListener的类? Android SDK在TouchEvent有一个接口(android.view.View.OnTouchListener).我不知道为什么下面这一行是错误的.Eclipse在OnTouchListener报错. public class TouchHandler extends OnTouchListener{ 如果我改为public interface TouchHandler extends OnTouchListen

封装的一个asp.net验证码类

第一个反映是验证码的这些属性是否可以设置(也就是说是封装成一个类,然后以暴露公有属性和方法的方式来使用的,还是在直接在一般处理程序中实现了验证码的生成到输出),结果比较可惜,是后者...... 里面的算法感觉挺不错,至少对于我这种对算法几乎是不懂的人来说是这样,于是想到去封装一下她然后无耻地纳入自己的类库中去^^ old原文件如下:点击下载 首先分析一下这份代码中的不足(自己觉得的): 1.面向过程式的编程,如果要修改验证码的属性,例如修改字体的大小.背景颜色等细节的东西,需要去一般处理程序中找