Changeset 7019


Ignore:
Timestamp:
10/02/10 16:04:50 (9 years ago)
Author:
melissa
Message:

Added support for RGB and indexed color images. Closes #567.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.2/components/bio-formats/src/loci/formats/in/PCXReader.java

    r7007 r7019  
    5757 
    5858  private int nColorPlanes; 
     59  private byte[][] lut; 
    5960 
    6061  // -- Constructor -- 
     
    7374    if (!FormatTools.validStream(stream, blockLen, false)) return false; 
    7475    return stream.read() == PCX_MAGIC_BYTE; 
     76  } 
     77 
     78  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
     79  public byte[][] get8BitLookupTable() { 
     80    FormatTools.assertId(currentId, true, 1); 
     81    return lut; 
    7582  } 
    7683 
     
    104111    } 
    105112 
     113    int src = y * nColorPlanes * bytesPerLine; 
    106114    for (int row=0; row<h; row++) { 
    107       System.arraycopy(b, (row*nColorPlanes + y) * bytesPerLine + x, 
    108         buf, row * w, w); 
     115      int rowOffset = row * nColorPlanes * bytesPerLine; 
     116      for (int c=0; c<nColorPlanes; c++) { 
     117        System.arraycopy(b, src + rowOffset + x, buf, c * w * h + row * w, w); 
     118        rowOffset += bytesPerLine; 
     119      } 
    109120    } 
    110121 
     
    119130      bytesPerLine = 0; 
    120131      nColorPlanes = 0; 
     132      lut = null; 
    121133    } 
    122134  } 
     
    153165    offset = in.getFilePointer() + 58; 
    154166 
     167    if (version == 5 && nColorPlanes == 1) { 
     168      in.seek(in.length() - 768); 
     169      lut = new byte[3][256]; 
     170      for (int i=0; i<lut[0].length; i++) { 
     171        for (int j=0; j<lut.length; j++) { 
     172          lut[j][i] = in.readByte(); 
     173        } 
     174      } 
     175      core[0].indexed = true; 
     176    } 
     177 
    155178    addGlobalMeta("Palette type", paletteType); 
    156179 
    157180    core[0].sizeZ = 1; 
    158181    core[0].sizeT = 1; 
    159     core[0].sizeC = 1; 
    160     core[0].rgb = false; 
     182    core[0].sizeC = nColorPlanes; 
     183    core[0].rgb = nColorPlanes > 1; 
    161184    core[0].imageCount = 1; 
    162185    core[0].pixelType = FormatTools.UINT8; 
    163186    core[0].dimensionOrder = "XYCZT"; 
     187    core[0].interleaved = false; 
    164188 
    165189    MetadataStore store = makeFilterMetadata(); 
  • trunk/components/bio-formats/src/loci/formats/in/PCXReader.java

    r6881 r7019  
    5757 
    5858  private int nColorPlanes; 
     59  private byte[][] lut; 
    5960 
    6061  // -- Constructor -- 
     
    7374    if (!FormatTools.validStream(stream, blockLen, false)) return false; 
    7475    return stream.read() == PCX_MAGIC_BYTE; 
     76  } 
     77 
     78  /* @see loci.formats.IFormatReader#get8BitLookupTable() */ 
     79  public byte[][] get8BitLookupTable() { 
     80    FormatTools.assertId(currentId, true, 1); 
     81    return lut; 
    7582  } 
    7683 
     
    104111    } 
    105112 
     113    int src = y * nColorPlanes * bytesPerLine; 
    106114    for (int row=0; row<h; row++) { 
    107       System.arraycopy(b, (row*nColorPlanes + y) * bytesPerLine + x, 
    108         buf, row * w, w); 
     115      int rowOffset = row * nColorPlanes * bytesPerLine; 
     116      for (int c=0; c<nColorPlanes; c++) { 
     117        System.arraycopy(b, src + rowOffset + x, buf, c * w * h + row * w, w); 
     118        rowOffset += bytesPerLine; 
     119      } 
    109120    } 
    110121 
     
    119130      bytesPerLine = 0; 
    120131      nColorPlanes = 0; 
     132      lut = null; 
    121133    } 
    122134  } 
     
    153165    offset = in.getFilePointer() + 58; 
    154166 
     167    if (version == 5 && nColorPlanes == 1) { 
     168      in.seek(in.length() - 768); 
     169      lut = new byte[3][256]; 
     170      for (int i=0; i<lut[0].length; i++) { 
     171        for (int j=0; j<lut.length; j++) { 
     172          lut[j][i] = in.readByte(); 
     173        } 
     174      } 
     175      core[0].indexed = true; 
     176    } 
     177 
    155178    addGlobalMeta("Palette type", paletteType); 
    156179 
    157180    core[0].sizeZ = 1; 
    158181    core[0].sizeT = 1; 
    159     core[0].sizeC = 1; 
    160     core[0].rgb = false; 
     182    core[0].sizeC = nColorPlanes; 
     183    core[0].rgb = nColorPlanes > 1; 
    161184    core[0].imageCount = 1; 
    162185    core[0].pixelType = FormatTools.UINT8; 
    163186    core[0].dimensionOrder = "XYCZT"; 
     187    core[0].interleaved = false; 
    164188 
    165189    MetadataStore store = makeFilterMetadata(); 
Note: See TracChangeset for help on using the changeset viewer.