Jimmie He於 2013年4月30日星期二UTC+8上午1時20分49秒寫道:
> I'm trying to read in the BMP data by the the code below,and I'm check the 
> data array with WINHEX,and it is correct,but which confuse me is why the size 
> is 0x180,but the actual picture should be 48*48 = 0x120 bytes because I use 
> 1-bit BMP not the 24bit BMP,could any one give some hints?
> 
> 
> 
> 
> 
> --------------------------------------------------------------------------------
> 
> __Head_Info = [
> 
>             [ 'Type'         ,0 , 2],#BM
> 
>             [ 'FSize'        ,2 , 4],#File Size
> 
>             [ 'Reserved'     ,6 , 4],#0x00000000
> 
>             [ 'OffBits'      ,10 , 4],#Offset of Image
> 
>             [ 'SSize'        ,14 , 4],# 40
> 
>             [ 'Width'        ,18 , 4],#Width
> 
>             [ 'Height'       ,22 , 4],#Hight
> 
>             [ 'Planes'       ,26 , 2],#1
> 
>             [ 'BitCount'     ,28 , 2],#{1,2,4,8,24}
> 
>             [ 'Compress'     ,30 , 4],#0
> 
>             [ 'SizeImage'    ,34 , 4],#Bytes Per Line
> 
>             [ 'XPM'          ,38 , 4],#2835
> 
>             [ 'YPM'          ,42 , 4],#2835
> 
>             [ 'ClrUsed'      ,46 , 4],#0
> 
>             [ 'ClrImportant' ,50 , 4]#0
> 
>             ]
> 
> _Type          =0;
> 
> _FSize         =1;
> 
> _Reserved      =2;
> 
> _OffBits       =3;
> 
> _SSize         =4;
> 
> _Width         =5;
> 
> _Height        =6;
> 
> _Planes        =7;
> 
> _BitCount      =8;
> 
> _Compress      =9;
> 
> _SizeImage     =10;
> 
> _XPM           =11;
> 
> _YPM           =12;
> 
> _ClrUsed       =13;
> 
> _ClrImportant =14;
> 
> 
> 
> def __getInt( b, idx):
> 
>     return binToInt(b,__Head_Info[idx][1],__Head_Info[idx][2])
> 
> 
> 
> def saveMatrixtoASC(bmpfilename,ascfilename):
> 
>     try:
> 
>         handle1=open( bmpfilename ,"rb")
> 
>         raw = bytearray(handle1.read( ))
> 
>         handle1.close
> 
>     except Exception as E:
> 
>         return "error:"+ str(E),""
> 
>     
> 
>     datastart=__getInt(raw, _OffBits)
> 
>     datasize =__getInt(raw, _SizeImage)
> 
>     print ('Image Offset = 0x%X'%datastart)
> 
>     print ('Image Size   = 0x%X'%datasize)
> 
>     handle2=open( ascfilename ,"w")
> 
>     for i in range(0,datasize):
> 
>        handle2.write('0x%02X,'%raw[datastart+i])
> 
>        if (i+1) % 16 == 0 :
> 
>           handle2.write("\n")
> 
>     handle2.close

The start of each line of bytes must be in the 32 bit=4byte 
boundary in the MS BMP format.

Please read the MS specs.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to