Re: Can read in the BMP data correctly ,but the size is not right?

2013-05-04 Thread Jimmie He
Totally right!Thanks again!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Can read in the BMP data correctly ,but the size is not right?

2013-04-30 Thread Jimmie He
On Tuesday, April 30, 2013 1:57:07 AM UTC+8, Peter Otten wrote:
 Jimmie He wrote:
 
 
 
 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?
 
 
 
 According to wikipedia http://en.wikipedia.org/wiki/BMP_file_format
 
 
 
 
 
 The size of each row is rounded up to a multiple of 4 bytes [...]
 
 
 
 
 
 So 48/8 == 6 will be rounded to 8, and 8*48 == 384 == 0x180.
 
 
 
  handle1=open( bmpfilename ,rb)
 
  raw = bytearray(handle1.read( ))
 
  handle1.close
 
 
 
 To actually do something the last line should be handle1.close(). I 
 
 recommend
 
 
 
 with open(bmpfilename ,rb) as handle1:
 
 raw = bytearray(handle1.read())
 
 
 
 instead which has the additional advantage that the file will be closed if 
 
 an exception occurs in the with-suite.
I've successfully read the correct data from BMP now by your advice,thanks 
again Peter and other helpful guy.Especially the BMP_file_format from wiki,very 
Visualize.
-- 
http://mail.python.org/mailman/listinfo/python-list


Can read in the BMP data correctly ,but the size is not right?

2013-04-29 Thread Jimmie He
   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],#0x
[ '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
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Can read in the BMP data correctly ,but the size is not right?

2013-04-29 Thread Chris Angelico
On Tue, Apr 30, 2013 at 3:20 AM, Jimmie He jimmie...@gmail.com wrote:
 handle1.close

I haven't looked at the rest of the code, but be careful of this: You
aren't actually *calling* this function. That might be your problem
and it might not, but try fixing it (add the parentheses, even though
there's nothing to put in them) and see if that helps. Same with the
handle2.close at the end.

ChrisA
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Can read in the BMP data correctly ,but the size is not right?

2013-04-29 Thread Peter Otten
Jimmie He wrote:

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?

According to wikipedia http://en.wikipedia.org/wiki/BMP_file_format


The size of each row is rounded up to a multiple of 4 bytes [...]


So 48/8 == 6 will be rounded to 8, and 8*48 == 384 == 0x180.

 handle1=open( bmpfilename ,rb)
 raw = bytearray(handle1.read( ))
 handle1.close

To actually do something the last line should be handle1.close(). I 
recommend

with open(bmpfilename ,rb) as handle1:
raw = bytearray(handle1.read())

instead which has the additional advantage that the file will be closed if 
an exception occurs in the with-suite.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Can read in the BMP data correctly ,but the size is not right?

2013-04-29 Thread MRAB

On 29/04/2013 18:20, Jimmie He wrote:

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?


[snip]
What size is 0x180?

If you're asking why the file size is 0x180 and not 0x120, it's simply
because of the header. An image file contains not just the pixels of
the image, but also information about the image.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Can read in the BMP data correctly ,but the size is not right?

2013-04-29 Thread 88888 Dihedral
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],#0x
 
 [ '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