回 帖 发 新 帖 刷新版面

主题:求救呀!急呀!

告诉我!为什么 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个回复)

沙发

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 了??

板凳

you 敢用我的名字!大胆!我在这上叫jakessss!

3 楼

什么名字呀!我注册时间都不知道比你早N年!你能回答我的问题吗?那个输出BMP格式图片的贴是不是你发的!你应该可以帮我喔!!

4 楼

[em10]
咱菜鸟,比你还要晕~~~[em10][em10][em10]

5 楼

我就是不明白!我学什么都支碰到这种类似问题! 真的要倒了!!

6 楼


如果你的程序是用QB写的也许能帮上忙!
你可以到相关的论坛去发帖子求助!
    Seek 1, &h0017
    Temp = Input(4,1)
    b_Height = GetDec(Temp)

因为在QB里是没有GetDec这个函数!

7 楼

晕死!GetDec(这个函数是我写的自定义函数呀! )

DEC(n) 把十六进制数 n 转换成相对应的十进制数。'注: n 是字符串型数据
HEX(n) 把十进制数 n 转换成相对应的十六进制字符串。‘注: n 是整型数据

8 楼

把你写的函数过程发上来我给你看看

9 楼

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 楼

这同功能是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

=========================================================================

我来回复

您尚未登录,请登录后再回复。点此登录或注册