主题:求救呀!急呀!
啊远
[专家分:2610] 发布于 2005-05-05 13:08:00
告诉我!为什么 b_Height 会等于 124 应该是 132 才对呀!!我不明白!请高手指点呀!
这是 Theaa.bmp 文件的数据
C:\>debug d:\theaa.bmp
-d
0AEF:0100 42 4D 80 29 00 00 00 00-00 00 3E 00 00 00 28 00 BM.)......>...(.
0AEF:0110 00 00 72 02 00 00 84 00-00 00 01 00 01 00 00 00 ..r.............
0AEF:0120 00 00 42 29 00 00 25 2E-00 00 25 2E 00 00 00 00 ..B)..%...%.....
0AEF:0130 00 00 00 00 00 00 FF FF-FF 00 00 00 00 00 00 00 ................
0AEF:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0AEF:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0AEF:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0AEF:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
下面是我写的程序 是用 Corel Script 写的!
Declare Function GetDec(Byval Char As String) As Long
Dim File_size As Long ' 文件大小
Dim Offset As Long ' 图像数据偏移地址
Dim Header_size As Long ' 信息头大小
Dim b_Width As long ' 图像的宽度
Dim b_Height As long ' 图像的高度
Dim Temp As String
Open "D:\Theaa.bmp" For Input As #1
Seek 1, &h0001
Temp = Input(2, 1)
If Temp <> "BM" Then Goto Err
Temp = ""
Seek 1, &h0003
File_size = GetDec(Input(4, 1))
Seek 1, &h000B
Offset = GetDec(Input(4, 1))
Seek 1, &h000F
Header_size = GetDec(Input(4, 1))
Seek 1, &h0013
b_Width = GetDec(Input(4,1))
Seek 1, &h0017
Temp = Input(4,1)
b_Height = GetDec(Temp)
Close 1
Message "File size: " & Cstr(File_size) & " Byte" \\
& Chr(13) & "Offset: " & Cstr(Offset) & " Byte"\\
& Chr(13) & "Header_size: " & Hex(Header_size) & "H Byte"\\
& Chr(13) & "b_Width: " & b_Width & " px"\\
& Chr(13) & "b_Height: " & b_Height & " px"
End
Err:
Message "错误!"
Function GetDec(Byval Char As String) AS Long
Dim index AS Long
Dim temp AS String
Dim str_temp AS String
For index = Len(Char) To 1 Step -1
temp = Cstr(ASC(Mid(Char, index, 1)))
If Len(temp) > 1 And Left(temp, 1) = "-" Then
temp = Mid(temp, 2, Len(temp))
End If
str_temp = str_temp & Hex(Clng(Temp))
Next
GetDec = Dec(str_temp)
End Function
回复列表 (共13个回复)
沙发
啊远 [专家分:2610] 发布于 2005-05-05 13:13:00
Seek 1, &h0017
Temp = Input(4,1)
相对应的数据应该是:
0AEF:0110 00 00 72 02 00 00 <<84 00-00 00>> 01 00 01 00 00 00 ..r.............
对应的十进制数 应该是 132 呀!怎么会是 124 了??
板凳
jakessss [专家分:30] 发布于 2005-05-05 13:29:00
you 敢用我的名字!大胆!我在这上叫jakessss!
3 楼
啊远 [专家分:2610] 发布于 2005-05-05 13:31:00
什么名字呀!我注册时间都不知道比你早N年!你能回答我的问题吗?那个输出BMP格式图片的贴是不是你发的!你应该可以帮我喔!!
4 楼
莫非白 [专家分:750] 发布于 2005-05-05 14:07:00
[em10]
咱菜鸟,比你还要晕~~~[em10][em10][em10]
5 楼
啊远 [专家分:2610] 发布于 2005-05-05 14:37:00
我就是不明白!我学什么都支碰到这种类似问题! 真的要倒了!!
6 楼
qb45 [专家分:2880] 发布于 2005-05-06 09:43:00
如果你的程序是用QB写的也许能帮上忙!
你可以到相关的论坛去发帖子求助!
Seek 1, &h0017
Temp = Input(4,1)
b_Height = GetDec(Temp)
因为在QB里是没有GetDec这个函数!
7 楼
啊远 [专家分:2610] 发布于 2005-05-06 10:04:00
晕死!GetDec(这个函数是我写的自定义函数呀! )
DEC(n) 把十六进制数 n 转换成相对应的十进制数。'注: n 是字符串型数据
HEX(n) 把十进制数 n 转换成相对应的十六进制字符串。‘注: n 是整型数据
8 楼
qb45 [专家分:2880] 发布于 2005-05-06 10:22:00
把你写的函数过程发上来我给你看看
9 楼
啊远 [专家分:2610] 发布于 2005-05-06 10:39:00
QB45大哥!你难到看不出来吗?
Function GetDec(Byval Char As String) AS Long
Dim index AS Long
Dim temp AS String
Dim str_temp AS String
For index = Len(Char) To 1 Step -1
temp = Cstr(ASC(Mid(Char, index, 1)))
If Len(temp) > 1 And Left(temp, 1) = "-" Then
temp = Mid(temp, 2, Len(temp))
End If
str_temp = str_temp & Hex(Clng(Temp))
Next
GetDec = Dec(str_temp)
End Function
这就是过程呀!
10 楼
啊远 [专家分:2610] 发布于 2005-05-06 10:42:00
这同功能是QBASIC程序!结果是正确的!晕死! hei = &h84 = 132 正确的!
====================================================================
DECLARE FUNCTION GetHex$ (char AS STRING)
DECLARE FUNCTION GetDec& (sHex AS STRING)
DIM BMP AS STRING
DIM FileSize AS STRING
DIM Offset AS STRING
DIM HSize AS STRING
DIM Wid AS STRING
DIM Hei AS STRING
DIM temp AS STRING
OPEN "D:\Theaa.bmp" FOR INPUT AS #1
SEEK 1, &H1
BMP = INPUT$(2, 1)
SEEK 1, &H3
temp = INPUT$(4, 1)
FileSize = GetHex(temp)
SEEK 1, &HB
temp = INPUT$(4, 1)
Offset = GetHex(temp)
SEEK 1, &HF
temp = INPUT$(4, 1)
HSize = GetHex(temp)
SEEK 1, &H13
temp = INPUT$(4, 1)
Wid = GetHex(temp)
SEEK 1, &H17
temp = INPUT$(4, 1)
Hei = GetHex(temp)
CLOSE #1
PRINT "Wid: ", GetDec(Wid)
PRINT "Hei: ", GetDec(Hei)
FUNCTION GetDec& (sHex AS STRING)
DIM index AS LONG
DIM D AS LONG
DIM DA AS LONG
DIM i AS LONG
DIM B AS LONG
i = LEN(sHex)
FOR index = 1 TO LEN(sHex) STEP 1
SELECT CASE MID$(sHex, index, 1)
CASE "A", "a"
D = 10
CASE "B", "b"
D = 11
CASE "C", "c"
D = 12
CASE "D", "d"
D = 13
CASE "E", "e"
D = 14
CASE "F", "f"
D = 15
CASE ELSE
D = VAL(MID$(sHex, index, 1))
END SELECT
i = i - 1
B = 16 ^ i
DA = DA + (D * B)
NEXT
GetDec = DA
END FUNCTION
FUNCTION GetHex$ (char AS STRING)
DIM index AS LONG
DIM temp AS STRING
DIM TempA AS STRING
index = LEN(char)
DO
temp = STR$(ASC(MID$(char, index, 1)))
IF LEFT$(temp, 1) = "-" THEN temp = MID$(temp, 2, LEN(temp) - 1)
temp = HEX$(VAL(temp))
TempA = TempA + temp
index = index - 1
LOOP WHILE index > 0
GetHex = TempA
END FUNCTION
=========================================================================
我来回复