/** * Decodes consecutive items until the given length is reached * * @param CDicomStreamReader $stream_reader The stream reader * * @param integer $length The code of the wanted type * * @return CDicomPDUItem[] The PDU items */ static function decodeConsecutiveItemsByLength(CDicomStreamReader $stream_reader, $length) { $items = array(); $pos = $stream_reader->getPos(); $endOfItem = $pos + $length; $item_type = self::readItemType($stream_reader); while ($item_type && $stream_reader->getPos() < $endOfItem) { if (!$item_type) { break; } $item_length = self::readItemLength($stream_reader); $item = new $item_type(array("length" => $item_length)); $item->decodeItem($stream_reader); $items[] = $item; if ($stream_reader->getPos() < $endOfItem) { $item_type = self::readItemType($stream_reader); } } return $items; }
/** * Decode the datas, depending on the transfer syntax * * @param CDicomStreamReader $stream_reader The stream writer * * @param string $transfer_syntax The UID of the transfer syntax * * @return void */ function decode(CDicomStreamReader $stream_reader, $transfer_syntax) { if (!$transfer_syntax) { return; } $this->attributes = array(); $this->datasets = array(); $stream_length = $stream_reader->getStreamLength(); while ($stream_reader->getPos() < $stream_length) { $dataset = new CDicomDataSet(); $dataset->decode($stream_reader, $transfer_syntax); $group = $dataset->getGroupNumber(); $element = $dataset->getElementNumber(); if (!array_key_exists($group, $this->datasets)) { $this->datasets[$group] = array(); } if (!array_key_exists($group, $this->attributes)) { $this->attributes[$group] = array(); } $this->datasets[$group][$element] = $dataset; $this->attributes[$group][$element] = $dataset->getValue(); } }
/** * Decode the PDU * * @param CDicomStreamReader $stream_reader The stream reader * * @return null */ function decodePDU(CDicomStreamReader $stream_reader) { $this->pdvs = array(); $stream_reader->setStreamLength($this->getTotalLength()); while ($stream_reader->getPos() < $stream_reader->getStreamLength()) { $pdv_length = $stream_reader->readUInt32(); // + 4; //$stream_reader->seek(-4); $pdv_content = $stream_reader->read($pdv_length); $pdv_handle = fopen('php://temp', 'w+'); fwrite($pdv_handle, $pdv_content, $pdv_length); $pdv_stream = new CDicomStreamReader($pdv_handle); $pdv_stream->rewind(); $pdv = new CDicomPDV(array("presentation_contexts" => $this->presentation_contexts, "length" => $pdv_length)); $pdv->decode($pdv_stream); $this->pdvs[] = $pdv; } }