Changeset 206

Show
Ignore:
Timestamp:
04/08/05 08:32:10 (19 years ago)
Author:
jerome
Message:

Improved colorspace detection

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pkpgcounter/trunk/pdlanalyzer/pclxl.py

    r205 r206  
    123123        """Indicates the end of a page.""" 
    124124        pos = self.pos 
     125        pos3 = pos - 3 
    125126        minfile = self.minfile 
    126         if (ord(minfile[pos-3]) == 0xf8) and (ord(minfile[pos-2]) == 0x31) : 
     127        if minfile[pos3:pos-1] == self.setNumberOfCopies : 
    127128            # The EndPage operator may be preceded by a PageCopies attribute 
    128129            # So set number of copies for current page. 
    129130            # From what I read in PCLXL documentation, the number 
    130131            # of copies is an unsigned 16 bits integer 
    131             self.pages[self.pagecount]["copies"] = unpack(self.endianness + "H", minfile[pos-5:pos-3])[0] 
     132            self.pages[self.pagecount]["copies"] = unpack(self.endianness + "H", minfile[pos-5:pos3])[0] 
    132133        return 0 
    133134         
    134135    def setColorSpace(self) :     
    135136        """Changes the color space.""" 
    136         if self.minfile[self.pos-4:self.pos-1] == (chr(0x02) + chr(0xf8) + chr(0x03)) :  
    137             self.isColor = 1 
     137        if self.minfile[self.pos-4:self.pos-1] == self.RGBColorSpace : 
     138            self.iscolor = 1 
    138139        return 0 
    139140             
     
    236237           http://www.hpdevelopersolutions.com/downloads/64/358/xl_ref20r22.pdf  
    237238        """ 
    238         self.isColor = None 
     239        self.iscolor = None 
    239240        self.endianness = None 
    240241        found = 0 
     
    268269        self.tags[0x44] = self.endPage      # EndPage 
    269270         
    270         self.tags[0x6a] = self.setColorSpace 
     271        self.tags[0x6a] = self.setColorSpace    # to detect color/b&w mode 
    271272         
    272273        self.tags[0xc0] = 1 # ubyte 
     
    304305        self.tags[0xfb] = self.embeddedDataSmall # dataLengthByte 
    305306             
     307        # color spaces     
     308        self.BWColorSpace = "".join([chr(0x00), chr(0xf8), chr(0x03)]) 
     309        self.GrayColorSpace = "".join([chr(0x01), chr(0xf8), chr(0x03)]) 
     310        self.RGBColorSpace = "".join([chr(0x02), chr(0xf8), chr(0x03)]) 
     311         
     312        # set number of copies 
     313        self.setNumberOfCopies = "".join([chr(0xf8), chr(0x31)])  
     314         
    306315        infileno = self.infile.fileno() 
    307316        self.pages = {} 
     
    326335             
    327336        # now handle number of copies for each page (may differ). 
    328         if self.debug : 
    329             sys.stderr.write("Color mode : %s\n" % self.isColor) 
     337        if self.iscolor : 
     338            colormode = "Color" 
     339        else :     
     340            colormode = "Black" 
    330341        for pnum in range(1, self.pagecount + 1) : 
    331342            # if no number of copies defined, take 1, as explained 
     
    338349            self.pagecount += (copies - 1) 
    339350            if self.debug : 
    340                 sys.stderr.write("%s*%s*%s*%s*%s\n" % (copies, page["mediatype"], page["mediasize"], page["orientation"], page["mediasource"])) 
     351                sys.stderr.write("%s*%s*%s*%s*%s*%s\n" % (copies, page["mediatype"], page["mediasize"], page["orientation"], page["mediasource"], colormode)) 
    341352             
    342353        return self.pagecount