Mercurial > hg > orthanc-stone
comparison Framework/Toolbox/DicomInstanceParameters.cpp @ 768:55411e7da2f7
LookupTableTextureSceneLayer
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 23 May 2019 20:04:33 +0200 |
parents | 26f4345e771e |
children | 32eaf4929b08 |
comparison
equal
deleted
inserted
replaced
767:dce5b067d040 | 768:55411e7da2f7 |
---|---|
318 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | 318 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
319 } | 319 } |
320 } | 320 } |
321 | 321 |
322 | 322 |
323 TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture(const Orthanc::ImageAccessor& pixelData) const | 323 Orthanc::ImageAccessor* DicomInstanceParameters::ConvertToFloat(const Orthanc::ImageAccessor& pixelData) const |
324 { | |
325 std::auto_ptr<Orthanc::Image> converted(new Orthanc::Image(Orthanc::PixelFormat_Float32, | |
326 pixelData.GetWidth(), | |
327 pixelData.GetHeight(), | |
328 false)); | |
329 Orthanc::ImageProcessing::Convert(*converted, pixelData); | |
330 | |
331 // Correct rescale slope/intercept if need be | |
332 data_.ApplyRescale(*converted, (pixelData.GetFormat() == Orthanc::PixelFormat_Grayscale32)); | |
333 | |
334 return converted.release(); | |
335 } | |
336 | |
337 | |
338 | |
339 TextureBaseSceneLayer* DicomInstanceParameters::CreateTexture | |
340 (const Orthanc::ImageAccessor& pixelData) const | |
324 { | 341 { |
325 assert(sizeof(float) == 4); | 342 assert(sizeof(float) == 4); |
326 | 343 |
327 Orthanc::PixelFormat sourceFormat = pixelData.GetFormat(); | 344 Orthanc::PixelFormat sourceFormat = pixelData.GetFormat(); |
328 | 345 |
336 // This is the case of a color image. No conversion has to be done. | 353 // This is the case of a color image. No conversion has to be done. |
337 return new ColorTextureSceneLayer(pixelData); | 354 return new ColorTextureSceneLayer(pixelData); |
338 } | 355 } |
339 else | 356 else |
340 { | 357 { |
341 if (sourceFormat != Orthanc::PixelFormat_Grayscale16 && | 358 // This is the case of a grayscale frame. Convert it to Float32. |
342 sourceFormat != Orthanc::PixelFormat_Grayscale32 && | |
343 sourceFormat != Orthanc::PixelFormat_SignedGrayscale16) | |
344 { | |
345 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented); | |
346 } | |
347 | |
348 std::auto_ptr<FloatTextureSceneLayer> texture; | 359 std::auto_ptr<FloatTextureSceneLayer> texture; |
349 | 360 |
350 { | 361 if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) |
351 // This is the case of a grayscale frame. Convert it to Float32. | 362 { |
352 std::auto_ptr<Orthanc::Image> converted(new Orthanc::Image(Orthanc::PixelFormat_Float32, | 363 texture.reset(new FloatTextureSceneLayer(pixelData)); |
353 pixelData.GetWidth(), | 364 } |
354 pixelData.GetHeight(), | 365 else |
355 false)); | 366 { |
356 Orthanc::ImageProcessing::Convert(*converted, pixelData); | 367 std::auto_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); |
357 | |
358 // Correct rescale slope/intercept if need be | |
359 data_.ApplyRescale(*converted, (sourceFormat == Orthanc::PixelFormat_Grayscale32)); | |
360 | |
361 texture.reset(new FloatTextureSceneLayer(*converted)); | 368 texture.reset(new FloatTextureSceneLayer(*converted)); |
362 } | 369 } |
363 | 370 |
364 if (data_.hasDefaultWindowing_) | 371 if (data_.hasDefaultWindowing_) |
365 { | 372 { |
368 } | 375 } |
369 | 376 |
370 return texture.release(); | 377 return texture.release(); |
371 } | 378 } |
372 } | 379 } |
380 | |
381 | |
382 LookupTableTextureSceneLayer* DicomInstanceParameters::CreateLookupTableTexture | |
383 (const Orthanc::ImageAccessor& pixelData) const | |
384 { | |
385 std::auto_ptr<FloatTextureSceneLayer> texture; | |
386 | |
387 if (pixelData.GetFormat() == Orthanc::PixelFormat_Float32) | |
388 { | |
389 return new LookupTableTextureSceneLayer(pixelData); | |
390 } | |
391 else | |
392 { | |
393 std::auto_ptr<Orthanc::ImageAccessor> converted(ConvertToFloat(pixelData)); | |
394 return new LookupTableTextureSceneLayer(*converted); | |
395 } | |
396 } | |
373 } | 397 } |