2012-10-26 212 views
2

我正在使用PB8.0,我想获取图片的宽度和高度来调整DW中的图片大小。你知道如何得到它吗?如何获得PB中图像的宽度和高度

我搜索一个例子来获取位图文件的宽度和高度。这似乎与位图文件正确的,但不能用于其他如.jpg,.gif注意

请帮我

//Getting a Bitmaps Width and Height 
int  li_job 
blob b 
string ls_ext 

ls_ext = lower(Right(as_filename, 3)) 
CHOOSE CASE ls_ext 
    CASE 'bmp' 
    li_job = FileOpen("filename.bmp", StreamMode!, Read!) 
    IF li_job > 0 THEN 
     FileRead(li_job, b) 

     arl_Width = Long(Integer(BlobMid(b, 19, 2)), & 
        Integer(BlobMid(b, 21, 2))) 
     arl_Height = Long(Integer(BlobMid(b, 23, 2)), & 
        Integer(BlobMid(b, 25, 2))) 
     FileClose(li_job) 
    ELSE 
     RETURN -1 
    END IF 
    CASE ELSE 
    RETURN -1 
END CHOOSE 
RETURN 1 

感谢

回答

0

这里是代码即可获得JPG的宽度和高度:

//JPG 

li_file = FileOpen(as_file_name, StreamMode!, Read!) 
If li_file = -1 Then Return 0 

li_read = FileRead (li_file, lb_data) 

If String (BlobMid (lb_Data, 1,3)) = Char (255) + Char (216) + Char (255) Then //JPG 

    ll_DataLen = Len(lb_Data) 
    ll_DataPos = 3 
    ll_FilePos = 3 
    lb_LoopFlag = true 
    Do While lb_LoopFlag 
     ll_DataPos = ll_DataPos + 1 
     ll_FilePos = ll_FilePos + 1 
     li_Char1 = Asc (String (BlobMid(lb_Data, ll_DataPos, 1))) 
     li_Char2 = Asc (String (BlobMid(lb_Data, ll_DataPos + 1, 1))) 

     If li_Char1 = 255 And li_Char2 <> 255 Then 
      If li_Char2 >= 192 And li_Char2 <= 195 Then 
       al_width = Asc (String (BlobMid (lb_Data, ll_DataPos + 7,1))) * 256 + Asc (String (BlobMid (lb_Data, ll_DataPos + 8,1))) 
       al_height= 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))) + Asc (String (BlobMid(lb_Data, ll_DataPos + 2, 1))) + 1 
       If ll_FilePos > ll_FileLength Then 
        Exit 
       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 
End If 

对于GIF:

al_width = Asc(String (BlobMid (lb_Data, 7,1))) + Asc (String (BlobMid (lb_Data, 8,1))) * 256 
al_height = Asc (String (BlobMid (lb_Data, 9,1))) + Asc (String (BlobMid (lb_Data, 10,1))) * 256 
3

图像尺寸的偏差取决于文件格式。您正在使用的值对BMP format有效,但对于另一种格式会有所不同。

您需要单独搜索您需要处理的任何文件格式。有些信息可用here。 VB处理JPEG,GIF,BMP,& PNG的类似示例可用here

此外,您可以通过Windows图像API获取一些信息,但我没有可用的示例。

+1

也http://www.wotsit.org/ – Terry

2

一种方法是将Picture控件添加到未选中可见属性的窗口并检查OriginalSize。

设置图片名称以加载图像,高度和宽度将可用于您的处理。

// p_1 is not visible 
p_1.PictureName = "c:\temp\pbHowTo.jpg" 

MessageBox("height", p_1.height) 
MessageBox("width", p_1.width) 

您可能需要转换像素值,因为它们位于PbUnit中。

height_pixel = UnitsToPixels(p_1.height, YUnitsToPixels!) 
width_pixel = UnitsToPixels(p_1.width, XUnitsToPixels!) 

Picture控件支持.BMP,GIF,.JPG和PNG文件。

相关问题