View Javadoc

1   ////////////////////////////////////////////////////////////////////////////////
2   // MillScript-Excel: an Open Spice interpreter and batch website creation tool
3   // Copyright (C) 2006 Open World Ltd, Kevin Rogers
4   //
5   // This file is part of MillScript-Excel.
6   //
7   // MillScript-Excel is free software; you can redistribute it and/or modify it under
8   // the terms of the GNU General Public License as published by the Free
9   // Software Foundation; either version 2 of the License, or (at your option)
10  // any later version.
11  //
12  // MillScript-Excel is distributed in the hope that it will be useful, but WITHOUT
13  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  // more details.
16  //
17  // You should have received a copy of the GNU General Public License along with
18  // MillScript-Excel; if not, write to the Free Software Foundation, Inc., 59 Temple
19  // Place, Suite 330, Boston, MA  02111-1307  USA
20  ////////////////////////////////////////////////////////////////////////////////
21  package org.millscript.office.excel.records.syntax;
22  
23  import org.millscript.office.excel.RecordSyntax;
24  import org.millscript.office.excel.RecordTokenizer;
25  import org.millscript.office.excel.alerts.BIFFAlert;
26  import org.millscript.office.excel.records.Bitmap;
27  import org.millscript.office.excel.versions.BIFF8;
28  import org.millscript.office.excel.versions.BIFF8X;
29  
30  /**
31   * 
32   */
33  public class BitmapRecordSyntax extends RecordSyntax implements BIFF8, BIFF8X {
34  
35      private static void checkValue( final int expected, final int found ) {
36          if ( expected != found ) {
37              throw new BIFFAlert(
38                  "Unexpected value in BITMAP record"
39              ).culprit( "expected", expected ).culprit( "found", found ).mishap();
40          }
41      }
42  
43      /**
44       * @see org.millscript.office.excel.RecordSyntax#newRecord(RecordTokenizer)
45       */
46      @Override
47      public Bitmap newRecord( final RecordTokenizer tokenizer ) {
48          // Validation as per specification - Unknown value
49          checkValue( 0x0009, tokenizer.read2ByteChar() );
50          // Validation as per specification - Unknown value
51          checkValue( 0x0001, tokenizer.read2ByteChar() );
52          // Read in the total size of the data
53          final int totalSize = tokenizer.read4ByteInt();
54          // Validation as per specification - Unknown value
55          checkValue( 0x000C, tokenizer.read2ByteChar() );
56          // Validation as per specification - Unknown value
57          checkValue( 0x0000, tokenizer.read2ByteChar() );
58          // Read in the width and height of the picture
59          final int width = tokenizer.read2ByteInt();
60          final int height = tokenizer.read2ByteInt();
61          // Validation as per specification - Numer of planes
62          checkValue( 0x0001, tokenizer.read2ByteChar() );
63          // Validation as per specification - Colour depth
64          checkValue( 0x0018, tokenizer.read2ByteChar() );
65          // Initialise the pixel data
66          final byte[] rawData = tokenizer.readBytesLeftInCurrentRecordData();
67          // Copy all the data from this record. Note that this will probably not
68          // be all the pixel data, as it's very likely this will require several
69          // CONTINUE records to contain it all...
70          return new Bitmap( height, width, rawData );
71      }
72  
73  }