PowerBuilder 如何得到jpg文件的尺寸?要 a * b 形式的

转载 2006年05月18日 16:45:00

 

前段时间有人发过的,自己测试下
-------------------------------------
$PBExportHeader$f_getpicturesize.srf
global type f_getpicturesize from function_object
end type

forward prototypes
global function integer f_getpicturesize (string as_filename, ref long al_picturewidth, ref long al_pictureheight)
end prototypes

global function integer f_getpicturesize (string as_filename, ref long al_picturewidth, ref long al_pictureheight);//  函数:  of_getpicturesize() 
//-------------------------------------------------------------------- 
//  描述:  获得图片文件的图像尺寸大小(支持GIF,JPG,BMP格式) 
//-------------------------------------------------------------------- 
//  参数:   
//                        value                    string            as_FileName                                  图片文件名称 
//                        reference            long                al_PictureWidth                          返回图片宽度 
//                        reference            long                al_PictureHeight                        返回图片高度 
//-------------------------------------------------------------------- 
//  返回值:    integer            1  -  成功,0  -  失败 
//-------------------------------------------------------------------- 
 
 
Integer  li_File,  li_DataRead 
Blob  lb_Data 
Long  ll_FileLength,ll_PictureWidth,ll_PictureHeight 
Long  ll_DataLen,ll_DataPos,ll_FilePos 
Boolean  lb_LoopFlag  =  True 
Char  lc_Char1,lc_Char2 
 
//文件不存在 
If  Not  FileExists(as_FileName)  Then  Return  0 
 
//取文件大小 
ll_FileLength  =  FileLength(as_FileName) 
 
//打开文件 
li_File  =  FileOpen(as_FileName,StreamMode!) 
If  li_File  =  -1  Then  Return  0 
 
//读取文件 
li_DataRead  =  FileRead(li_File,lb_Data) 
If  li_DataRead  <=  0  Then 
           FileClose(li_File) 
           Return  0 
End  If 
 
//  GIF目前主要有两种类型 
//  1.  标识为GIF87a,  只是用来存储单幅静止图像 
//  2.  标识为GIF89a,  可以同时存储若干幅静止图像并进而形成连续的动画 
//  文件的前  6  个字节为标识:GIF87a  或  GIF89a,  第  7,8  字节为图像宽度(width),   
//  第  9,10  字节为图像高度(height),  注意两个字节中低位在前 
 
//  GIF  文件格式判断 
If  String(BlobMid(lb_Data,1,4))  =  'GIF8'  Then 
           ll_PictureWidth  =  Asc(String(BlobMid(lb_Data,7,1)))  +  Asc(String(BlobMid(lb_Data,8,1)))  *   256 
           ll_PictureHeight  =  Asc(String(BlobMid(lb_Data,9,1)))  +  Asc(String(BlobMid(lb_Data,10,1))) *  256 
           If  ll_PictureWidth  >  0  And  ll_PictureHeight  >  0  Then 
  al_PictureWidth  =  ll_PictureWidth 
  al_PictureHeight  =  ll_PictureHeight 
  FileClose(li_File) 
  Return  1 
           Else 
  FileClose(li_File) 
  Return  0 
           End  If 
End  If 
 
//  JPEG文件格式 
//  前  3  个字节为标识:  0xFF,0xD8,0xFF 
If  String(BlobMid(lb_Data,1,3))  =  Char(255)  +  Char(216)  +  Char(255)  Then 
           ll_DataLen  =  Len(lb_Data) 
           ll_DataPos  =  3 
           ll_FilePos  =  3 
           Do  While  lb_LoopFlag 
                       ll_DataPos  =  ll_DataPos  +  1 
                       ll_FilePos  =  ll_FilePos  +  1 
                       lc_Char1  =  String(BlobMid(lb_Data,ll_DataPos,1)) 
                       lc_Char2  =  String(BlobMid(lb_Data,ll_DataPos  +  1,1)) 
                       If  lc_Char1  =  Char(255)  And  lc_Char2  <>  Char(255)  Then 
                                   If  lc_Char2  >=  Char(192)  And  lc_Char2  <=  Char(195)  Then 
                                               //找到尺寸数据 
  ll_PictureWidth  =  Asc(String(BlobMid(lb_Data,ll_DataPos  +  7,1)))  * 256  +  Asc(String(BlobMid(lb_Data,ll_DataPos  +  8,1))) 
  ll_PictureHeight  =  Asc(String(BlobMid(lb_Data,ll_DataPos  +  5,1)))  *  256  +  Asc(String(BlobMid(lb_Data,ll_DataPos  +  6,1))) 
  lb_LoopFlag  =  False 
                                   Else 
  //没有找到尺寸数据,重新读取文件 
  ll_FilePos  =  ll_FilePos  +  Asc(String(BlobMid(lb_Data,ll_DataPos  +  3,1)))  *  256  +  Asc(String(BlobMid(lb_Data,ll_DataPos  +  2,1)))  +  1 
                                               If  ll_FilePos  >  ll_FileLength  Then 
                                                           FileClose(li_File) 
                                                           Return  0 
                                               Else 
                                                           FileSeek(li_File,ll_FilePos) 
                                                           FileRead(li_File,lb_Data) 
                                                           ll_DataLen  =  Len(lb_Data) 
                                                           ll_DataPos  =  0 
                                               End  If 
                                   End  If 
                       End  If 
                       If  ll_DataPos  =  ll_DataLen  -  9  And  lb_LoopFlag  =  True  Then 
                                   ll_FilePos  =  ll_FilePos  -  9 
                                   FileSeek(li_File,ll_FilePos) 
                                   FileRead(li_File,lb_Data) 
                                   ll_DataLen  =  Len(lb_Data) 
                                   ll_DataPos  =  0 
                       End  If 
                       If  ll_FilePos  >=  ll_FileLength  Then 
                                   lb_LoopFlag  =  False 
                       End  If 
           Loop 
           If  ll_PictureWidth  >  0  And  ll_PictureHeight  >  0  Then 
                       al_PictureWidth  =  ll_PictureWidth 
                       al_PictureHeight  =  ll_PictureHeight 
                       FileClose(li_File) 
                       Return  1 
           Else 
                       FileClose(li_File) 
                       Return  0 
           End  If 
End  If 
 
//  BMP文件格式 
//  前两个字节是标识:标识可能有很多种 
//  第  19,20,21,22  字节为宽度(width),  第  23,24,25,26  字节为高度(height) 
//  四个字节组成dword,  低位在前 
If  String(BlobMid(lb_Data,1,2))  =  'BM'  Then 
           ll_PictureWidth  =  Asc(String(BlobMid(lb_Data,19,1)))  +  Asc(String(BlobMid(lb_Data,20,1))) *  256  +  Asc(String(BlobMid(lb_Data,21,1)))  *  65536  +  Asc(String(BlobMid(lb_Data,22,1)))  *  16777216 
           ll_PictureHeight  =  Asc(String(BlobMid(lb_Data,23,1)))  +  Asc(String(BlobMid(lb_Data,24,1))) *  256  +  Asc(String(BlobMid(lb_Data,25,1)))  *  65536  +  Asc(String(BlobMid(lb_Data,26,1)))  *  16777216 
           If  ll_PictureWidth  >  0  And  ll_PictureHeight  >  0  Then 
                       al_PictureWidth  =  ll_PictureWidth 
                       al_PictureHeight  =  ll_PictureHeight 
                       ////将图像的真实大小转换为PBUnit大小,并返回 
                       //al_PictureWidth  =  PixelsToUnits(ll_PictureWidth,XPixelsToUnits!) 
                       //al_PictureHeight  =  PixelsToUnits(ll_PictureHeight,YPixelsToUnits!) 
                       FileClose(li_File) 
                       Return  1 
           Else 
                       FileClose(li_File) 
                       Return  0 
           End  If 
End  If 
 
 
Return  0
end function

转贴,还没来得及测试!!!

PowerBuilder 如何得到jpg文件的尺寸? a * b 形式[转]

 前段时间有人发过的,自己测试下 ------------------------------------- $PBExportHeader$f_getpicturesize.srf gl...
  • tlammon
  • tlammon
  • 2018年01月14日 13:09
  • 5

C#快速获取JPG图片大小及英寸分辨率

C#快速获取JPG图片大小及英寸分辨率         public static int getJpgSize(string FileName, out Size JpgSize, out flo...
  • u014113117
  • u014113117
  • 2016年05月06日 22:25
  • 355

dicom之将dcm文件解析为jpg后等比例压缩

前段时间用dcm4chee对dcm文件进行了转换,转换格式为bmp和jpg,但是转化完后发现6M的dcm源文件变成了一个13M的bmp,手机端显示会很吃力,于是决定做个压缩处理,提供两种压缩方式,第一...
  • wyl_0728
  • wyl_0728
  • 2017年06月16日 14:29
  • 471

powerbuilder日期函数

PB系统函数 之 日期时间函数Day() ——————————————————————————- 功能得到日期型数据中的号数(1到31之间的整数值)。 语法Day ( date ) 参数dat...
  • u014679804
  • u014679804
  • 2015年07月15日 17:22
  • 909

powerbuilder初试——揭开那层薄纱

相信自己,自己就能超越自己,这就是我们这个时代的奇迹!信息时代的奇迹!...
  • xvshu
  • xvshu
  • 2014年02月13日 22:02
  • 4084

PowerBuilder总结——原来你是这么的简单

在自学考试最后的阶段是让我们用pb做一个小程序。当然,之前对pb只是有个简单的了解,但是真要是用它做个什么东西还真难。经过了几个星期的奋战,终于将毕业设计做完了。让我们怀着兴奋的心情,来回顾一下这段时...
  • u010168160
  • u010168160
  • 2015年03月22日 07:59
  • 2466

PowerBuilder窗口设计

一、窗口的类型 1、Main(主)窗口   2、 Popup(弹出式)窗口   3、Child(子)窗口   4、Response(响应)窗口   5、MDI(多文档界面)窗口 二、窗口的...
  • acmjk
  • acmjk
  • 2015年03月04日 17:10
  • 845

PowerBuilder基础知识

1、 PowerBuilder简介  PowerBuilder是一种功能强大并且易于开发复杂应用系统的前端数据库开发工具,利用它可以快速开发大型数据库应用系统。 PB是具有图形界面的分布式数据库前...
  • acmjk
  • acmjk
  • 2015年03月06日 11:04
  • 847

JPG文件格式初步认识

优点: 1).照相机几乎都是保存为jpg格式,摄影作品或写实作品支持高级压缩,广泛应用于照相和互联网中。 2)JPEG能提高无损和有损的高压缩比。 3) JPEG一直在不断发展,JPEG 2000的...
  • Blues1021
  • Blues1021
  • 2015年05月01日 22:00
  • 1410

减少 JPG 文件大小

减少 JPG 文件大小如果你是一个现代的开发者,无论你是网站开发、移动开发、还是一些奇怪的系统管理程序,你一定会使用 JPG 文件。JPG 是你工作的一部分,并且对于用户体验有着极其重要...
  • asdzheng
  • asdzheng
  • 2016年06月28日 22:04
  • 2260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PowerBuilder 如何得到jpg文件的尺寸?要 a * b 形式的
举报原因:
原因补充:

(最多只允许输入30个字)