Changeset 3476


Ignore:
Timestamp:
12/14/07 11:45:47 (12 years ago)
Author:
melissa
Message:

Fixed a bunch of miscellaneous bugs and efficiency issues.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/DicomReader.java

    r3394 r3476  
    224224    boolean signed = false; 
    225225 
     226    core.interleaved[0] = true; 
     227 
    226228    while (decodingTags) { 
    227229      int tag = getNextTag(); 
    228230 
     231      if (elementLength == 0) continue; 
     232 
    229233      if ((location & 1) != 0) oddLocations = true; 
    230       if (inSequence) { 
    231         addInfo(tag, null); 
    232         if (in.getFilePointer() >= (in.length() - 4)) { 
    233           decodingTags = false; 
    234         } 
    235         continue; 
    236       } 
    237234 
    238235      String s; 
     
    323320          break; 
    324321        default: 
    325           addInfo(tag, null); 
     322          s = in.readString(elementLength); 
     323          addInfo(tag, s); 
    326324      } 
    327325      if (in.getFilePointer() >= (in.length() - 4)) { 
     
    351349      else if (isJPEG) { 
    352350        if (i == 0) offsets[i] = baseOffset; 
    353         else { 
    354           in.seek(offsets[i - 1]); 
    355           new JPEGCodec().decompress(in, new Boolean(core.littleEndian[0])); 
    356           offsets[i] = in.getFilePointer(); 
     351        else offsets[i] = offsets[i - 1] + 3; 
     352 
     353        byte[] buf = new byte[8192]; 
     354        boolean found = false; 
     355        while (!found) { 
     356          for (int q=0; q<buf.length-1; q++) { 
     357            if (buf[q] == (byte) 0xff && buf[q + 1] == (byte) 0xd8) { 
     358              found = true; 
     359              offsets[i] = in.getFilePointer() + q - 8192; 
     360              break; 
     361            } 
     362          } 
     363          if (!found) { 
     364            for (int q=0; q<4; q++) { 
     365              buf[q] = buf[buf.length + q - 4]; 
     366            } 
     367            in.read(buf, 4, buf.length - 4); 
     368          } 
    357369        } 
    358370      } 
     
    427439  private void addInfo(int tag, String value) throws IOException { 
    428440    long oldFp = in.getFilePointer(); 
     441    String oldValue = value; 
    429442    String info = getHeaderInfo(tag, value); 
    430443 
    431     if (inSequence && info != null && vr != SQ) info = ">" + info; 
    432444    if (info != null && tag != ITEM) { 
     445      if (info.trim().equals("")) info = oldValue; 
     446 
    433447      String key = (String) TYPES.get(new Integer(tag)); 
    434448      if (key == null) key = "" + tag; 
     
    458472      } 
    459473 
    460       if (tag != PIXEL_DATA) addMeta(key, info); 
     474      if (tag != PIXEL_DATA) { 
     475        addMeta(key, info); 
     476      } 
    461477    } 
    462478  } 
     
    562578        } 
    563579        vr = IMPLICIT_VR; 
    564         if (core.littleEndian[0]) { 
    565           return (b[3] << 24) + (b[2] << 16) + (b[1] << 8) + b[0]; 
    566         } 
    567         return (b[0] << 24) + (b[1] << 16) + (b[2] << 8) + b[3]; 
     580        return DataTools.bytesToInt(b, core.littleEndian[0]); 
    568581      case AE: 
    569582      case AS: 
     
    590603      case QQ: 
    591604        // Explicit VR with 16-bit length 
    592         if (core.littleEndian[0]) return (b[3] << 8) + b[2]; 
    593         else return (b[2] << 8) + b[3]; 
     605        return DataTools.bytesToShort(b, 2, 2, core.littleEndian[0]); 
    594606      default: 
    595607        vr = IMPLICIT_VR; 
     
    601613    int groupWord = in.readShort(); 
    602614    if (groupWord == 0x0800 && bigEndianTransferSyntax) { 
    603       core.littleEndian[0] = false; 
     615      //core.littleEndian[0] = false; 
    604616      groupWord = 0x0008; 
    605       in.order(false); 
     617      //in.order(false); 
    606618    } 
    607619 
     
    614626 
    615627    elementLength = getLength(); 
     628 
     629    if (elementLength == 0 && tag == PIXEL_DATA) { 
     630      elementLength = getLength(); 
     631    } 
    616632 
    617633    // HACK - needed to read some GE files 
Note: See TracChangeset for help on using the changeset viewer.