我正在使用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
由于
答案 0 :(得分:3)
图像大小的偏移量取决于文件格式。您使用的值对BMP format有效,但对另一种格式有效。
您需要单独搜索需要处理的任何文件格式。有些信息可供here使用。一个类似的例子,用于VB处理JPEG,GIF,BMP和& PNG可用here。
此外,您可以通过Windows图像API获取一些信息,但我没有可用的示例。
答案 1 :(得分: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文件。
答案 2 :(得分: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