sky808 发表于 2010-2-17 20:12:24

请问如何获取图片的各种属性

请教下如何获取图片的分辨率和颜色深度。
如:1024x768 32bit
感谢回答!

pusofalse 发表于 2010-2-18 00:35:38


$hFile = FileOpen("0001.jpg", 16)
$bData = FileRead($hFile, 1024)
FileClose($hFile)

$tagJPEG = "byte Header;char JFIF;byte Version;byte DensityUnits;byte XPixel;byte YPixel;ubyte XZoomPixel;ubyte YZooomPixel;byte Signature"

$tBinary = DllStructCreate("byte Binary")
$pBuffer = DllStructGetPtr($tBinary)
$tBuffer = DllStructCreate($tagJPEG, $pBuffer)
DllStructSetData($tBinary, "Binary", $bData)
$tBuffer1 = $tBuffer

If (DllStructGetData($tBuffer, "Signature") = "0xFFDB") Then
        $pBuffer += DllStructGetSize($tBuffer) + 69 + 67
Else
        $pBuffer += DllStructGetSize($tBuffer) - 2
EndIf

$tBuffer = DllStructCreate("byte Signature", $pBuffer)

If (DllStructGetData($tBuffer, "Signature") = "0xFFFE") Then
        $pBuffer += DllStructGetSize($tBuffer)
        $tBuffer = DllStructCreate("byte CommentBytes", $pBuffer)
        $pBuffer += Number(String(DllStructGetData($tBuffer, "CommentBytes")))
Else
        $pBuffer += DllStructGetSize($tBuffer) - 2
EndIf


$tBuffer = DllStructCreate("byte Signature", $pBuffer)
Switch DllStructGetData($tBuffer, "Signature")
Case ("0xFFC0")
        $pBuffer += 4
Case ("0xFFDB")
        $pBuffer += 67 * 2 + 8
EndSwitch

$tBuffer = DllStructCreate("byte Accuracy;byte Height;byte Width", $pBuffer)

$sInfo = ""
$sInfo = "X DPI: " & Number(String(DllStructGetData($tBuffer1, "XPixel"))) & @CRLF
$sInfo &= "Y DPI: " & Number(String(DllStructGetData($tBuffer1, "YPixel"))) & @CRLF
$sInfo &= "Width: " & Number(String(DllStructGetData($tBuffer, "Width"))) & @CRLF
$sInfo &= "Height: " & Number(String(DllStructGetData($tBuffer, "Height"))) & @CRLF
$sInfo &= "Accuracy: " & Number(String(DllStructGetData($tBuffer, "Accuracy"))) & @CRLF

Msgbox(0, "", $sInfo)

sky808 发表于 2010-2-18 12:36:33

非常感谢,我去看看.....
页: [1]
查看完整版本: 请问如何获取图片的各种属性