Mercurial > hg > orthanc-stone
comparison Framework/Layers/OrthancFrameLayerSource.cpp @ 93:5945e81734a3 wasm
decoding of JPEG images
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 29 May 2017 17:28:31 +0200 |
parents | 64e60018943f |
children | f8bce1bebe01 |
comparison
equal
deleted
inserted
replaced
92:961ee171d933 | 93:5945e81734a3 |
---|---|
27 #include "../../Resources/Orthanc/Core/OrthancException.h" | 27 #include "../../Resources/Orthanc/Core/OrthancException.h" |
28 #include "../Toolbox/DicomFrameConverter.h" | 28 #include "../Toolbox/DicomFrameConverter.h" |
29 | 29 |
30 #include <boost/lexical_cast.hpp> | 30 #include <boost/lexical_cast.hpp> |
31 | 31 |
32 | |
33 // TODO REMOVE THIS | |
34 #include "../Widgets/LayerWidget.h" | |
35 | |
36 namespace OrthancStone | 32 namespace OrthancStone |
37 { | 33 { |
38 void OrthancFrameLayerSource::NotifyGeometryReady(const OrthancSlicesLoader& loader) | 34 void OrthancFrameLayerSource::NotifyGeometryReady(const OrthancSlicesLoader& loader) |
39 { | 35 { |
40 if (loader.GetSliceCount() > 0) | 36 if (loader.GetSliceCount() > 0) |
41 { | 37 { |
42 // Make sure all the slices are parallel. TODO Alleviate this constraint | 38 LayerSourceBase::NotifyGeometryReady(); |
43 for (size_t i = 1; i < loader.GetSliceCount(); i++) | |
44 { | |
45 if (!GeometryToolbox::IsParallel(loader.GetSlice(i).GetGeometry().GetNormal(), | |
46 loader.GetSlice(0).GetGeometry().GetNormal())) | |
47 { | |
48 LayerSourceBase::NotifyGeometryError(); | |
49 return; | |
50 } | |
51 } | |
52 } | 39 } |
53 | 40 else |
54 LayerSourceBase::NotifyGeometryReady(); | 41 { |
42 LayerSourceBase::NotifyGeometryError(); | |
43 } | |
55 } | 44 } |
56 | 45 |
57 void OrthancFrameLayerSource::NotifyGeometryError(const OrthancSlicesLoader& loader) | 46 void OrthancFrameLayerSource::NotifyGeometryError(const OrthancSlicesLoader& loader) |
58 { | 47 { |
59 LayerSourceBase::NotifyGeometryError(); | 48 LayerSourceBase::NotifyGeometryError(); |
60 } | 49 } |
61 | 50 |
62 void OrthancFrameLayerSource::NotifySliceImageReady(const OrthancSlicesLoader& loader, | 51 void OrthancFrameLayerSource::NotifySliceImageReady(const OrthancSlicesLoader& loader, |
63 unsigned int sliceIndex, | 52 unsigned int sliceIndex, |
64 const Slice& slice, | 53 const Slice& slice, |
65 Orthanc::ImageAccessor* image) | 54 Orthanc::ImageAccessor* image, |
55 SliceImageQuality quality) | |
66 { | 56 { |
67 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(image, slice, true), slice); | 57 bool isFull = (quality == SliceImageQuality_Full); |
58 LayerSourceBase::NotifyLayerReady(FrameRenderer::CreateRenderer(image, slice, isFull), slice); | |
68 } | 59 } |
69 | 60 |
70 void OrthancFrameLayerSource::NotifySliceImageError(const OrthancSlicesLoader& loader, | 61 void OrthancFrameLayerSource::NotifySliceImageError(const OrthancSlicesLoader& loader, |
71 unsigned int sliceIndex, | 62 unsigned int sliceIndex, |
72 const Slice& slice) | 63 const Slice& slice, |
64 SliceImageQuality quality) | |
73 { | 65 { |
74 LayerSourceBase::NotifyLayerError(slice.GetGeometry()); | 66 LayerSourceBase::NotifyLayerError(slice.GetGeometry()); |
75 } | 67 } |
76 | 68 |
77 OrthancFrameLayerSource::OrthancFrameLayerSource(IWebService& orthanc, | 69 OrthancFrameLayerSource::OrthancFrameLayerSource(IWebService& orthanc, |
131 | 123 |
132 if (loader_.IsGeometryReady()) | 124 if (loader_.IsGeometryReady()) |
133 { | 125 { |
134 if (loader_.LookupSlice(index, viewportSlice)) | 126 if (loader_.LookupSlice(index, viewportSlice)) |
135 { | 127 { |
136 loader_.ScheduleLoadSliceImage(index); | 128 //loader_.ScheduleLoadSliceImage(index, SliceImageQuality_Full); |
129 loader_.ScheduleLoadSliceImage(index, SliceImageQuality_Jpeg50); | |
137 } | 130 } |
138 else | 131 else |
139 { | 132 { |
140 LayerSourceBase::NotifyLayerError(viewportSlice); | 133 LayerSourceBase::NotifyLayerError(viewportSlice); |
141 } | 134 } |