请登陆或者注册新用户 用户名 密码 记住密码 注册新用户 忘记密码了

回 帖 快速回帖 发 新 帖 刷新版面
主题:[原创]获取图片尺寸的代码

作者:一江秋水

专家分:7880

级别:40级别:40级别:40级别:40级别:40级别:40级别:40

发表时间:2010-6-9 14:21:00    [回复] 
楼主
获取图片尺寸的代码

  大家都知道,将图片框有关属性设置为自动大小,这样,打开图片后,图片框的尺寸就是图片的尺寸。如果你不想将图片框有关属性设置为自动大小,那么打开图片后可用API函数GetObject来获取图片尺寸。但是有的图片无法直接用图片框打开(例如 png),或者,我们想在不打开图片的情况下也能获取图片大小,这时,就可使用下面的代码来获取图片的尺寸了,GetImageSize过程的参数w、h就是返回的图片尺寸。注意一点:图片的宽或高均要≤65025像素。

Private Sub GetImageSize(OpenName As String, w As Long, h As Long)
On Error GoTo 100
Dim k As Long, H1 As Byte, H2 As Byte, W1 As Byte, W2 As Byte

Open OpenName For Binary As #1
Get #1, 1, H1
Get #1, , H2
Get #1, , W1
Get #1, , W2
If H1 = 0 And H2 = 0 And W1 = 1 Then 'ico
  Get #1, 7, W2
  Get #1, , H2
  W1 = 0: H1=0
ElseIf H1 = 66 And H2 = 77 Then 'bmp
  Get #1, 19, W2
  Get #1, 20, W1
  Get #1, 23, H2
  Get #1, 24, H1
ElseIf H1 = 71 And H2 = 73 And W1 = 70 Then 'gif
  Get #1, 7, W2
  Get #1, , W1
  Get #1, , H2
  Get #1, , H1
ElseIf H1 = 255 And H2 = 216 Then 'jpg
  k = 3
  Do
    Get #1, k, H1
    Get #1, , H2
    Get #1, , W1
    Get #1, , W2
    k = k + 2 + W2 + W1 * 256
  Loop Until H1 = 255 And H2 = 192
  Get #1, , H1 '每个样本位数,舍弃
  Get #1, , H1
  Get #1, , H2
  Get #1, , W1
  Get #1, , W2
ElseIf H1 = 137 And H2 = 80 And W1 = 78 And W2 = 71 Then 'png
  Get #1, 19, W1
  Get #1, 20, W2
  Get #1, 23, H1
  Get #1, 24, H2
ElseIf H1 = 215 And H2 = 205 And W1 = 198 And W2 = 154 Then 'wmf
  Dim L As Integer, R As Integer, T As Integer, B As Integer
  Get #1, 7, L
  Get #1, , T
  Get #1, , R
  Get #1, , B
  L = R - L: T = B - T
  W2 = L Mod 256: W1 = L \ 256: H2 = T Mod 256: H1 = T \ 256
ElseIf H1 = 77 And H2 = 77 Or H1 = 73 And H2 = 73 Then 'tif
  Dim de As Integer, t1 As Integer, t2 As Long
  Get #1, , t2           '获取第一个IFD的偏移量
  Get #1, t2 + 1, de     '获取第一个IFD中DE的数量
  For i = 1 To de
    Get #1, , t1         '获取属性的标签编号
    If t1 = 256 Then     '如果是图像宽
      Get #1, , t1       '废弃
      Get #1, , t2       '废弃
      Get #1, , W2
      Get #1, , W1
      Get #1, , t1       '废弃
      k = k + 1
    ElseIf t1 = 257 Then '如果是图像高
      Get #1, , t1       '废弃
      Get #1, , t2       '废弃
      Get #1, , H2
      Get #1, , H1
      Get #1, , t1       '废弃
      k = k + 1
    Else                 '否则这些数据废弃
      Get #1, , t1
      Get #1, , t2
      Get #1, , t2
    End If
    If k = 2 Then Exit For
  Next i
End If
Close #1
w = W1 * 256 + W2: h = H1 * 256 + H2
Exit Sub
100
Close #1
MsgBox "无效图片"
End Sub

  最后修改于2010-6-9 14:22:00

作者:merry05

专家分:8900

级别:45级别:45级别:45级别:45级别:45级别:45级别:45级别:45

发表时间:2010-6-9 17:18:00    [回复]  [引用]
1楼
不得不说,很猛

但要获得图片尺寸,肯定会有后续图片处理的需求,所以还是推荐GDI+

 

 此帖被评10分

作者:尚武崇文

专家分:10

级别:1

发表时间:2010-6-15 13:58:00    [回复]  [引用]
2楼
用CAD绘制三视图是如何快速从图中获取尺寸呢?一般是按着书上的那些图然后在CAD上画的图纸上除了有基本的三视图还有那些辅助的向视图我用CAD画图的时候总是很慢就是因为我不能快速的从图中获得尺寸

 

 此帖被评10分

作者:heimeng105

专家分:10

级别:1

发表时间:2010-7-15 10:38:00    [回复]  [引用]
3楼

谢谢............

 

 此帖被评10分
发表时间:2010-7-15 20:35:00    [回复]  [引用]
4

 

 此帖被评10分
[首页] [上页] [下页] [尾页]     共有 4 回帖 当前第 1 页(共1页 20帖/页)     跳转至第
回 帖 快速回帖 发 新 帖 刷新版面

版主管理:  删除此帖   转贴   置顶   加入精华   强制结帖   >>>进入管理页面