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