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 }