2

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

我搜索了一个示例以获取位图文件的宽度和高度。位图文件似乎是正确的,但对于 .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

谢谢

4

3 回答 3

3

图像大小的偏移量取决于文件格式。您使用的值对BMP 格式有效,但对于另一种格式会有所不同。

您需要单独搜索需要处理的任何文件格式。一些信息可在此处获得。此处提供了 VB 处理 JPEG、GIF、BMP 和 PNG 的类似示例。

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

于 2012-10-26T11:42:55.183 回答
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!)

图片控件支持 .BMP、GIF、.JPG 和 PNG 文件。

于 2012-10-27T12:33:20.740 回答
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
于 2016-04-01T06:16:12.493 回答