Changeset 7057


Ignore:
Timestamp:
10/08/10 17:32:39 (9 years ago)
Author:
melissa
Message:

Fixed PICT sub-image reading, see  omero:#3037.

Files:
2 edited

Legend:

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

    r7007 r7057  
    177177    } 
    178178 
    179     int plane = getSizeX() * getSizeY(); 
     179    int plane = w * h; 
    180180 
    181181    if (lookup != null) { 
     
    199199      byte[] c2 = null; 
    200200 
    201       for (int i=0; i<getSizeY(); i++) { 
     201      for (int i=y; i<h + y; i++) { 
    202202        c0 = (byte[]) strips.get(i * nc + nc - 3); 
    203203        c1 = (byte[]) strips.get(i * nc + nc - 2); 
    204204        c2 = (byte[]) strips.get(i * nc + nc - 1); 
    205         int baseOffset = i * getSizeX(); 
    206         System.arraycopy(c0, 0, buf, baseOffset, getSizeX()); 
    207         System.arraycopy(c1, 0, buf, plane + baseOffset, getSizeX()); 
    208         System.arraycopy(c2, 0, buf, 2*plane + baseOffset, getSizeX()); 
     205        int baseOffset = (i - y) * w; 
     206        System.arraycopy(c0, x, buf, baseOffset, w); 
     207        System.arraycopy(c1, x, buf, plane + baseOffset, w); 
     208        System.arraycopy(c2, x, buf, 2*plane + baseOffset, w); 
    209209      } 
    210210    } 
     
    212212      // RGB value is packed into a single short: xRRR RRGG GGGB BBBB 
    213213      int[] row = null; 
    214       for (int i=0; i<getSizeY(); i++) { 
     214      for (int i=y; i<h + y; i++) { 
    215215        row = (int[]) strips.get(i); 
    216216 
    217         for (int j=0; j<row.length; j++) { 
    218           int base = i * row.length + j; 
     217        for (int j=x; j<w + x; j++) { 
     218          int base = (i - y) * w + (j - x); 
    219219          buf[base] = (byte) ((row[j] & 0x7c00) >> 10); 
    220220          buf[plane + base] = (byte) ((row[j] & 0x3e0) >> 5); 
  • trunk/components/bio-formats/src/loci/formats/in/PictReader.java

    r6881 r7057  
    177177    } 
    178178 
    179     int plane = getSizeX() * getSizeY(); 
     179    int plane = w * h; 
    180180 
    181181    if (lookup != null) { 
     
    199199      byte[] c2 = null; 
    200200 
    201       for (int i=0; i<getSizeY(); i++) { 
     201      for (int i=y; i<h + y; i++) { 
    202202        c0 = (byte[]) strips.get(i * nc + nc - 3); 
    203203        c1 = (byte[]) strips.get(i * nc + nc - 2); 
    204204        c2 = (byte[]) strips.get(i * nc + nc - 1); 
    205         int baseOffset = i * getSizeX(); 
    206         System.arraycopy(c0, 0, buf, baseOffset, getSizeX()); 
    207         System.arraycopy(c1, 0, buf, plane + baseOffset, getSizeX()); 
    208         System.arraycopy(c2, 0, buf, 2*plane + baseOffset, getSizeX()); 
     205        int baseOffset = (i - y) * w; 
     206        System.arraycopy(c0, x, buf, baseOffset, w); 
     207        System.arraycopy(c1, x, buf, plane + baseOffset, w); 
     208        System.arraycopy(c2, x, buf, 2*plane + baseOffset, w); 
    209209      } 
    210210    } 
     
    212212      // RGB value is packed into a single short: xRRR RRGG GGGB BBBB 
    213213      int[] row = null; 
    214       for (int i=0; i<getSizeY(); i++) { 
     214      for (int i=y; i<h + y; i++) { 
    215215        row = (int[]) strips.get(i); 
    216216 
    217         for (int j=0; j<row.length; j++) { 
    218           int base = i * row.length + j; 
     217        for (int j=x; j<w + x; j++) { 
     218          int base = (i - y) * w + (j - x); 
    219219          buf[base] = (byte) ((row[j] & 0x7c00) >> 10); 
    220220          buf[plane + base] = (byte) ((row[j] & 0x3e0) >> 5); 
Note: See TracChangeset for help on using the changeset viewer.