本文整理汇总了C#中IByteSource.Require方法的典型用法代码示例。如果您正苦于以下问题:C# IByteSource.Require方法的具体用法?C# IByteSource.Require怎么用?C# IByteSource.Require使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IByteSource
的用法示例。
在下文中一共展示了IByteSource.Require方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ParseFragmentSequenceValueAsync
private async Task<bool> ParseFragmentSequenceValueAsync(IByteSource source)
{
if (this.parseStage == ParseStage.Value)
{
if (!source.Require(this.length))
{
this.result = DicomReaderResult.Suspended;
return false;
}
var buffer = await source.GetBufferAsync(this.length).ConfigureAwait(false);
buffer = EndianByteBuffer.Create(buffer, source.Endian, this.fragmentItem == 1 ? 4 : this._vr.UnitSize);
this.observer.OnFragmentSequenceItem(source, buffer);
this.parseStage = ParseStage.Tag;
}
return true;
}
示例2: ParseItemSequence
private void ParseItemSequence(IByteSource source, object state) {
try {
_result = DicomReaderResult.Processing;
while (!source.IsEOF && !source.HasReachedMilestone()) {
if (_state == ParseState.Tag) {
source.Mark();
if (!source.Require(8, ParseItemSequence, state)) {
_result = DicomReaderResult.Suspended;
return;
}
ushort group = source.GetUInt16();
ushort element = source.GetUInt16();
_tag = new DicomTag(group, element);
if (_tag != DicomTag.Item && _tag != DicomTag.SequenceDelimitationItem) {
// assume invalid sequence
source.Rewind();
if (!_implicit)
source.PopMilestone();
_observer.OnEndSequence();
if (_badPrivateSequence) {
_explicit = !_explicit;
_badPrivateSequence = false;
}
return;
}
_length = source.GetUInt32();
if (_tag == DicomTag.SequenceDelimitationItem) {
// end of sequence
_observer.OnEndSequence();
if (_badPrivateSequence) {
_explicit = !_explicit;
_badPrivateSequence = false;
}
ResetState();
return;
}
_state = ParseState.Value;
}
if (_state == ParseState.Value) {
if (_length != UndefinedLength) {
if (!source.Require(_length, ParseItemSequence, state)) {
_result = DicomReaderResult.Suspended;
return;
}
source.PushMilestone(_length);
}
_observer.OnBeginSequenceItem(source, _length);
ResetState();
ParseDataset(source, state);
ResetState();
_observer.OnEndSequenceItem();
continue;
}
}
// end of explicit length sequence
if (source.HasReachedMilestone())
source.PopMilestone();
_observer.OnEndSequence();
if (_badPrivateSequence) {
_explicit = !_explicit;
_badPrivateSequence = false;
}
} catch (Exception e) {
_exception = e;
_result = DicomReaderResult.Error;
} finally {
if (_result != DicomReaderResult.Processing && _result != DicomReaderResult.Suspended) {
_async.Set();
}
}
}
示例3: ParseItemSequenceValueAsync
private async Task<bool> ParseItemSequenceValueAsync(IByteSource source)
{
if (this.parseStage == ParseStage.Value)
{
if (this.length != UndefinedLength)
{
if (!source.Require(this.length))
{
this.result = DicomReaderResult.Suspended;
return false;
}
source.PushMilestone(this.length);
}
this.observer.OnBeginSequenceItem(source, this.length);
this.ResetState();
await this.ParseDatasetAsync(source).ConfigureAwait(false);
this.ResetState();
this.observer.OnEndSequenceItem();
}
return true;
}
示例4: ParseFragmentSequenceTag
private bool ParseFragmentSequenceTag(IByteSource source)
{
if (this.parseStage == ParseStage.Tag)
{
source.Mark();
if (!source.Require(8))
{
this.result = DicomReaderResult.Suspended;
return false;
}
var group = source.GetUInt16();
var element = source.GetUInt16();
DicomTag tag = new DicomTag(@group, element);
if (tag != DicomTag.Item && tag != DicomTag.SequenceDelimitationItem)
{
throw new DicomReaderException("Unexpected tag in DICOM fragment sequence: {0}", tag);
}
this.length = source.GetUInt32();
if (tag == DicomTag.SequenceDelimitationItem)
{
// end of fragment
this.observer.OnEndFragmentSequence();
this.fragmentItem = 0;
this.ResetState();
return false;
}
this.fragmentItem++;
this.parseStage = ParseStage.Value;
}
return true;
}
示例5: ParseItemSequenceTag
private bool ParseItemSequenceTag(IByteSource source)
{
if (this.parseStage == ParseStage.Tag)
{
source.Mark();
if (!source.Require(8))
{
this.result = DicomReaderResult.Suspended;
return false;
}
var group = source.GetUInt16();
var element = source.GetUInt16();
this._tag = new DicomTag(@group, element);
if (this._tag != DicomTag.Item && this._tag != DicomTag.SequenceDelimitationItem)
{
// assume invalid sequence
source.Rewind();
if (!this._implicit)
{
source.PopMilestone();
}
this.observer.OnEndSequence();
if (this.badPrivateSequence)
{
this.isExplicitVR = !this.isExplicitVR;
this.badPrivateSequence = false;
}
return false;
}
this.length = source.GetUInt32();
if (this._tag == DicomTag.SequenceDelimitationItem)
{
// #64, in case explicit length has been specified despite occurrence of Sequence Delimitation Item
if (source.HasReachedMilestone() && source.MilestonesCount > this.sequenceDepth)
{
this.ResetState();
return true;
}
// end of sequence
this.observer.OnEndSequence();
if (this.badPrivateSequence)
{
this.isExplicitVR = !this.isExplicitVR;
this.badPrivateSequence = false;
}
this.ResetState();
return false;
}
this.parseStage = ParseStage.Value;
}
return true;
}
示例6: ParseItemSequenceValue
private bool ParseItemSequenceValue(IByteSource source)
{
if (this.parseStage == ParseStage.Value)
{
if (this.length != UndefinedLength)
{
if (!source.Require(this.length))
{
this.result = DicomReaderResult.Suspended;
return false;
}
source.PushMilestone(this.length);
}
this.observer.OnBeginSequenceItem(source, this.length);
this.ResetState();
++this.sequenceDepth;
this.ParseDataset(source);
--this.sequenceDepth;
this.ResetState();
this.observer.OnEndSequenceItem();
}
return true;
}
示例7: ParseLength
private bool ParseLength(IByteSource source)
{
while (this.parseStage == ParseStage.Length)
{
if (this._tag == DicomTag.Item || this._tag == DicomTag.ItemDelimitationItem
|| this._tag == DicomTag.SequenceDelimitationItem)
{
if (!source.Require(4))
{
this.result = DicomReaderResult.Suspended;
return false;
}
this.length = source.GetUInt32();
this.parseStage = ParseStage.Value;
break;
}
if (this.isExplicitVR)
{
if (this._vr == DicomVR.Implicit)
{
if (!source.Require(4))
{
this.result = DicomReaderResult.Suspended;
return false;
}
this.length = source.GetUInt32();
// assume that undefined length in implicit VR element is SQ
if (this.length == UndefinedLength)
{
this._vr = DicomVR.SQ;
}
}
else if (this._vr.Is16bitLength)
{
if (!source.Require(2))
{
this.result = DicomReaderResult.Suspended;
return false;
}
this.length = source.GetUInt16();
}
else
{
if (!source.Require(6))
{
this.result = DicomReaderResult.Suspended;
return false;
}
source.Skip(2);
this.length = source.GetUInt32();
// CP-246 (#177) handling
// assume that Undefined Length in explicit datasets with VR UN are sequences
// According to CP-246 the sequence shall be handled as ILE, but this will be handled later...
// in the current code this needs to be restricted to privates
if (this.length == UndefinedLength && this._vr == DicomVR.UN && this._tag.IsPrivate)
{
this._vr = DicomVR.SQ;
}
}
}
else
{
if (!source.Require(4))
{
this.result = DicomReaderResult.Suspended;
return false;
}
this.length = source.GetUInt32();
// assume that undefined length in implicit dataset is SQ
if (this.length == UndefinedLength && this._vr == DicomVR.UN)
{
this._vr = DicomVR.SQ;
}
}
this.parseStage = ParseStage.Value;
}
return true;
}
示例8: ParsePreamble
private void ParsePreamble(IByteSource source, object state)
{
try {
if (!source.Require(132, ParsePreamble, state))
return;
_source.Skip(128);
if (_source.GetUInt8() != 'D' ||
_source.GetUInt8() != 'I' ||
_source.GetUInt8() != 'C' ||
_source.GetUInt8() != 'M')
throw new DicomReaderException("Invalid preamble found in DICOM file parser");
DicomReaderCallbackObserver obs = new DicomReaderCallbackObserver();
obs.Add(DicomTag.TransferSyntaxUID, delegate(object sender, DicomReaderEventArgs ea) {
try {
string uid = Encoding.ASCII.GetString(ea.Data.Data);
_syntax = DicomTransferSyntax.Parse(uid);
} catch {
}
});
_source.Endian = _syntax.Endian;
_reader.IsExplicitVR = _syntax.IsExplicitVR;
_reader.BeginRead(_source, new DicomReaderMultiObserver(obs, _fmiObserver), FileMetaInfoStopTag, OnFileMetaInfoParseComplete, null);
} catch (Exception e) {
if (_exception == null)
_exception = e;
_result = DicomReaderResult.Error;
} finally {
if (_result != DicomReaderResult.Processing && _result != DicomReaderResult.Suspended) {
_async.Set();
}
}
}
示例9: ParseTag
private bool ParseTag(IByteSource source)
{
if (this.parseStage == ParseStage.Tag)
{
source.Mark();
if (!source.Require(4))
{
this.result = DicomReaderResult.Suspended;
return false;
}
var group = source.GetUInt16();
var element = source.GetUInt16();
DicomPrivateCreator creator = null;
if (@group.IsOdd() && element > 0x00ff)
{
var card = (uint)(@group << 16) + (uint)(element >> 8);
lock (this.locker)
{
string pvt;
if (this._private.TryGetValue(card, out pvt))
{
creator = this.dictionary.GetPrivateCreator(pvt);
}
}
}
this._tag = new DicomTag(@group, element, creator);
this._entry = this.dictionary[this._tag];
if (!this._tag.IsPrivate && this._entry != null && this._entry.MaskTag == null)
{
this._tag = this._entry.Tag; // Use dictionary tag
}
if (this.stop != null
&& this.stop(new ParseState { Tag = this._tag, SequenceDepth = this.sequenceDepth }))
{
this.result = DicomReaderResult.Stopped;
return false;
}
this.parseStage = ParseStage.VR;
}
return true;
}
示例10: ParseVR
private bool ParseVR(IByteSource source)
{
while (this.parseStage == ParseStage.VR)
{
if (this._tag == DicomTag.Item || this._tag == DicomTag.ItemDelimitationItem
|| this._tag == DicomTag.SequenceDelimitationItem)
{
this._vr = DicomVR.NONE;
this.parseStage = ParseStage.Length;
break;
}
if (this.isExplicitVR)
{
if (!source.Require(2))
{
this.result = DicomReaderResult.Suspended;
return false;
}
source.Mark();
var bytes = source.GetBytes(2);
var vr = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
if (string.IsNullOrWhiteSpace(vr))
{
if (this._entry != null)
{
this._vr = this._entry.ValueRepresentations.FirstOrDefault();
}
}
else if (!DicomVR.TryParse(vr, out this._vr))
{
// unable to parse VR; rewind VR bytes for continued attempt to interpret the data.
this._vr = DicomVR.Implicit;
source.Rewind();
}
}
else
{
if (this._entry != null)
{
if (this._entry == DicomDictionary.UnknownTag)
{
this._vr = DicomVR.UN;
}
else if (this._entry.ValueRepresentations.Contains(DicomVR.OB)
&& this._entry.ValueRepresentations.Contains(DicomVR.OW))
{
this._vr = DicomVR.OW; // ???
}
else
{
this._vr = this._entry.ValueRepresentations.FirstOrDefault();
}
}
}
if (this._vr == null)
{
this._vr = DicomVR.UN;
}
this.parseStage = ParseStage.Length;
if (this._vr == DicomVR.UN)
{
if (this._tag.Element == 0x0000)
{
// Group Length to UL
this._vr = DicomVR.UL;
break;
}
if (this.isExplicitVR)
{
break;
}
}
if (this._tag.IsPrivate)
{
if (this._tag.Element != 0x0000 && this._tag.Element <= 0x00ff && this._vr == DicomVR.UN)
{
this._vr = DicomVR.LO; // force private creator to LO
}
}
}
return true;
}
示例11: ParseAsync
private static async Task<Tuple<DicomReaderResult, DicomFileFormat, DicomTransferSyntax>> ParseAsync(
IByteSource source,
IDicomReaderObserver fileMetasetInfoObserver,
IDicomReaderObserver datasetObserver,
Func<ParseState, bool> stop)
{
if (!source.Require(132))
{
return Tuple.Create(DicomReaderResult.Error, DicomFileFormat.Unknown, (DicomTransferSyntax)null);
}
var fileFormat = DicomFileFormat.Unknown;
var syntax = DicomTransferSyntax.ExplicitVRLittleEndian;
Preprocess(source, ref fileFormat, ref syntax);
return
await
DoParseAsync(source, fileMetasetInfoObserver, datasetObserver, stop, syntax, fileFormat).ConfigureAwait(false);
}
示例12: Parse
private static ParseResult Parse(
IByteSource source,
IDicomReaderObserver fileMetasetInfoObserver,
IDicomReaderObserver datasetObserver,
Func<ParseState, bool> stop)
{
if (!source.Require(132))
{
return new ParseResult(DicomReaderResult.Error, DicomFileFormat.Unknown, null);
}
var fileFormat = DicomFileFormat.Unknown;
var syntax = DicomTransferSyntax.ExplicitVRLittleEndian;
Preprocess(source, ref fileFormat, ref syntax);
var result = DoParse(
source,
fileMetasetInfoObserver,
datasetObserver,
stop,
ref syntax,
ref fileFormat);
return new ParseResult(result, fileFormat, syntax);
}
示例13: ParsePreamble
private void ParsePreamble(IByteSource source, object state) {
try {
if (!source.Require(132, ParsePreamble, state))
return;
// mark file origin
_source.Mark();
// test for DICM preamble
_source.Skip(128);
if (_source.GetUInt8() == 'D' &&
_source.GetUInt8() == 'I' &&
_source.GetUInt8() == 'C' &&
_source.GetUInt8() == 'M')
_fileFormat = DicomFileFormat.DICOM3;
// test for incorrect syntax in file meta info
do {
if (_fileFormat == DicomFileFormat.DICOM3) {
// move milestone to after preamble
_source.Mark();
} else {
// rewind to origin milestone
_source.Rewind();
}
// test for file meta info
var group = _source.GetUInt16();
if (group > 0x00ff) {
_source.Endian = Endian.Big;
_syntax = DicomTransferSyntax.ExplicitVRBigEndian;
group = Endian.Swap(group);
}
if (group > 0x00ff) {
// invalid starting tag
_fileFormat = DicomFileFormat.Unknown;
_source.Rewind();
break;
}
if (_fileFormat == DicomFileFormat.Unknown) {
if (group == 0x0002)
_fileFormat = DicomFileFormat.DICOM3NoPreamble;
else
_fileFormat = DicomFileFormat.DICOM3NoFileMetaInfo;
}
var element = _source.GetUInt16();
var tag = new DicomTag(group, element);
// test for explicit VR
var vrt = Encoding.UTF8.GetBytes(tag.DictionaryEntry.ValueRepresentations[0].Code);
var vrs = _source.GetBytes(2);
if (vrt[0] != vrs[0] || vrt[1] != vrs[1]) {
// implicit VR
if (_syntax.Endian == Endian.Little)
_syntax = DicomTransferSyntax.ImplicitVRLittleEndian;
else
_syntax = DicomTransferSyntax.ImplicitVRBigEndian;
}
_source.Rewind();
} while (_fileFormat == DicomFileFormat.Unknown);
if (_fileFormat == DicomFileFormat.Unknown)
throw new DicomReaderException("Attempted to read invalid DICOM file");
var obs = new DicomReaderCallbackObserver();
if (_fileFormat != DicomFileFormat.DICOM3) {
obs.Add(DicomTag.RecognitionCodeRETIRED, (object sender, DicomReaderEventArgs ea) => {
try {
string code = Encoding.UTF8.GetString(ea.Data.Data, 0, ea.Data.Data.Length);
if (code == "ACR-NEMA 1.0")
_fileFormat = DicomFileFormat.ACRNEMA1;
else if (code == "ACR-NEMA 2.0")
_fileFormat = DicomFileFormat.ACRNEMA2;
} catch {
}
});
}
obs.Add(DicomTag.TransferSyntaxUID, (object sender, DicomReaderEventArgs ea) => {
try {
string uid = Encoding.UTF8.GetString(ea.Data.Data, 0, ea.Data.Data.Length);
_syntax = DicomTransferSyntax.Parse(uid);
} catch {
}
});
_source.Endian = _syntax.Endian;
_reader.IsExplicitVR = _syntax.IsExplicitVR;
if (_fileFormat == DicomFileFormat.DICOM3NoFileMetaInfo)
_reader.BeginRead(_source, new DicomReaderMultiObserver(obs, _dataObserver), null, OnDatasetParseComplete, null);
else
_reader.BeginRead(_source, new DicomReaderMultiObserver(obs, _fmiObserver), FileMetaInfoStopTag, OnFileMetaInfoParseComplete, null);
} catch (Exception e) {
//.........这里部分代码省略.........
示例14: ParseFragmentSequence
private void ParseFragmentSequence(IByteSource source, object state) {
try {
_result = DicomReaderResult.Processing;
while (!source.IsEOF) {
if (_state == ParseState.Tag) {
source.Mark();
if (!source.Require(8, ParseFragmentSequence, state)) {
_result = DicomReaderResult.Suspended;
return;
}
ushort group = source.GetUInt16();
ushort element = source.GetUInt16();
DicomTag tag = new DicomTag(group, element);
if (tag != DicomTag.Item && tag != DicomTag.SequenceDelimitationItem)
throw new DicomReaderException("Unexpected tag in DICOM fragment sequence: {0}", tag);
_length = source.GetUInt32();
if (tag == DicomTag.SequenceDelimitationItem) {
// end of fragment
_observer.OnEndFragmentSequence();
_fragmentItem = 0;
ResetState();
ParseDataset(source, PopState());
return;
}
_fragmentItem++;
_state = ParseState.Value;
}
if (_state == ParseState.Value) {
if (!source.Require(_length, ParseFragmentSequence, state)) {
_result = DicomReaderResult.Suspended;
return;
}
IByteBuffer buffer = source.GetBuffer(_length);
if (_fragmentItem == 1)
buffer = EndianByteBuffer.Create(buffer, source.Endian, 4);
else
buffer = EndianByteBuffer.Create(buffer, source.Endian, _vr.UnitSize);
_observer.OnFragmentSequenceItem(source, buffer);
_state = ParseState.Tag;
}
}
} catch (Exception e) {
_exception = e;
_result = DicomReaderResult.Error;
} finally {
if (_result != DicomReaderResult.Processing && _result != DicomReaderResult.Suspended) {
_async.Set();
}
}
}
示例15: ParseValueAsync
//.........这里部分代码省略.........
if (!IsPrivateSequence(source))
{
this._vr = DicomVR.UN;
break;
}
if (IsPrivateSequenceBad(source, this.isExplicitVR))
{
this.badPrivateSequence = true;
this.isExplicitVR = !this.isExplicitVR;
}
break;
}
if (this._vr == DicomVR.SQ)
{
// start of sequence
this.observer.OnBeginSequence(source, this._tag, this.length);
this.parseStage = ParseStage.Tag;
if (this.length != UndefinedLength)
{
this._implicit = false;
source.PushMilestone(this.length);
}
else
{
this._implicit = true;
}
var last = source.Position;
// Conformance with CP-246 (#177)
var needtoChangeEndian = false;
if (parsedVR == DicomVR.UN && !this._tag.IsPrivate)
{
this._implicit = true;
needtoChangeEndian = source.Endian == Endian.Big;
}
if (needtoChangeEndian)
{
source.Endian = Endian.Little;
}
await this.ParseItemSequenceAsync(source).ConfigureAwait(false);
if (needtoChangeEndian)
{
source.Endian = Endian.Big;
}
// Aeric Sylvan - https://github.com/rcd/fo-dicom/issues/62#issuecomment-46248073
// Fix reading of SQ with parsed VR of UN
if (source.Position > last || this.length == 0)
{
return true;
}
this.parseStage = ParseStage.Value;
this._vr = parsedVR;
}
if (this.length == UndefinedLength)
{
this.observer.OnBeginFragmentSequence(source, this._tag, this._vr);
this.parseStage = ParseStage.Tag;
await this.ParseFragmentSequenceAsync(source).ConfigureAwait(false);
return true;
}
if (!source.Require(this.length))
{
this.result = DicomReaderResult.Suspended;
return false;
}
var buffer = await source.GetBufferAsync(this.length).ConfigureAwait(false);
if (!this._vr.IsString)
{
buffer = EndianByteBuffer.Create(buffer, source.Endian, this._vr.UnitSize);
}
this.observer.OnElement(source, this._tag, this._vr, buffer);
// parse private creator value and add to lookup table
if (this._tag.IsPrivate && this._tag.Element != 0x0000 && this._tag.Element <= 0x00ff)
{
var creator =
DicomEncoding.Default.GetString(buffer.Data, 0, buffer.Data.Length)
.TrimEnd((char)DicomVR.LO.PaddingValue);
var card = (uint)(this._tag.Group << 16) + this._tag.Element;
lock (this.locker)
{
this._private[card] = creator;
}
}
this.ResetState();
}
return true;
}