449,015 Members | 1,016 Online
Need help? Post your question and get tips & solutions from a community of 449,015 IT Pros & Developers. It's quick & easy.

finding color of bits

 P: n/a hi i am reading thru a book on digitizing text lines using c code.They use a font data file containing unsigned char fonts [][16] with elements like 0x00,0x7e,0x81 etc to represent each character .After a text line is scanned 16 times the equivalent codes are stored in an unsigned char[] bitImage. Now the digitized line stored in bitImage is taken 1 character at a time(ie 8 bits) and color of each is to be determined whether black or white. The book says that 'quickest method will be to write assembler code to shift each octect(ie bitImage[i] in a for loop of i=0 to i>=1){ if ((currentcolor&c)==(octet&c)) incrmntcurrentRunlength(); else startNewRunlength(); } .... } if somebody can explain what happens in this loop it would be a great help..Being a beginner in c/bit manip etc i find it a little difficult to understand these.. thanks in adv harry Jun 27 '08 #1
4 Replies

 P: n/a harryos wrote: The book continues to point out that 'bits in each octect can be got by shifting it and ANDing with a constant'.Being new to bit manipulation etc i couldn't quite write the code.if someone can help pls do. Least Bit == octet >0 & 1 Next bit == octet >1 & 1 Next next bit == octet >2 & 1 or Least Bit == (octet & 1) != 0 Next bit == (octet & 2) != 0 Next next bit == (octet & 4) != 0 -- pete Jun 27 '08 #2

 P: n/a "harryos" >=1){ if ((currentcolor&c)==(octet&c)) incrmntcurrentRunlength(); else startNewRunlength(); } There's too much superfluous code here, and it seems concerned with some compression scheme. The essence of it is here, where M contains the current pattern (eg. your 0x7E example from above), or the 'octet': int M=0x7E; int i; int colour; #define BLACK 0XFF #define WHITE 0X00 for (i=0x80; i!=0; i>>=1) { colour = (M & i) ? BLACK : WHITE; printf("%d ",colour); } -- Bartc Jun 27 '08 #3

 P: n/a Bartc wrote: ) "harryos" )for (i=0 ; i>=1){ ) if ((currentcolor&c)==(octet&c)) incrmntcurrentRunlength(); ) else startNewRunlength(); ) } ) ) There's too much superfluous code here, and it seems concerned with some ) compression scheme. FAX, perhaps ? SaSW, Willem -- Disclaimer: I am in no way responsible for any of the statements made in the above text. For all I know I might be drugged or something.. No I'm not paranoid. You all think I'm paranoid, don't you ! #EOT Jun 27 '08 #4

 P: n/a Ernie, thanks for the detailed reply..it was a lot,lot helpful... Willem was right..it was a book about Fax and it uses modified huffman codes for compression.. thanks again harry Jun 27 '08 #5