comparison Plugins/Engine/OrthancPlugins.cpp @ 1829:31df3b48925e

OrthancPluginDecodeDicomImage
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 25 Nov 2015 17:35:52 +0100
parents a71d74987090
children 47d032c48818
comparison
equal deleted inserted replaced
1828:a71d74987090 1829:31df3b48925e
1283 image.reset(new JpegReader); 1283 image.reset(new JpegReader);
1284 reinterpret_cast<JpegReader&>(*image).ReadFromMemory(p.data, p.size); 1284 reinterpret_cast<JpegReader&>(*image).ReadFromMemory(p.data, p.size);
1285 break; 1285 break;
1286 } 1286 }
1287 1287
1288 case OrthancPluginImageFormat_Dicom:
1289 {
1290 ParsedDicomFile dicom(p.data, p.size);
1291 image.reset(Decode(dicom, 0));
1292 break;
1293 }
1294
1288 default: 1295 default:
1289 throw OrthancException(ErrorCode_ParameterOutOfRange); 1296 throw OrthancException(ErrorCode_ParameterOutOfRange);
1290 } 1297 }
1291 1298
1292 *(p.target) = reinterpret_cast<OrthancPluginImage*>(image.release()); 1299 *(p.target) = reinterpret_cast<OrthancPluginImage*>(image.release());
1454 { 1461 {
1455 const _OrthancPluginCreateDicom& p = 1462 const _OrthancPluginCreateDicom& p =
1456 *reinterpret_cast<const _OrthancPluginCreateDicom*>(parameters); 1463 *reinterpret_cast<const _OrthancPluginCreateDicom*>(parameters);
1457 1464
1458 Json::Value json; 1465 Json::Value json;
1459 Json::Reader reader; 1466
1460 if (!reader.parse(p.json, json)) 1467 if (p.json == NULL)
1461 { 1468 {
1462 throw OrthancException(ErrorCode_BadJson); 1469 json = Json::objectValue;
1470 }
1471 else
1472 {
1473 Json::Reader reader;
1474 if (!reader.parse(p.json, json))
1475 {
1476 throw OrthancException(ErrorCode_BadJson);
1477 }
1463 } 1478 }
1464 1479
1465 std::string dicom; 1480 std::string dicom;
1466 1481
1467 { 1482 {
1486 const _OrthancPluginCreateImage& p = 1501 const _OrthancPluginCreateImage& p =
1487 *reinterpret_cast<const _OrthancPluginCreateImage*>(parameters); 1502 *reinterpret_cast<const _OrthancPluginCreateImage*>(parameters);
1488 1503
1489 std::auto_ptr<ImageAccessor> result; 1504 std::auto_ptr<ImageAccessor> result;
1490 1505
1491 if (service == _OrthancPluginService_CreateImage) 1506 switch (service)
1492 { 1507 {
1493 result.reset(new Image(Plugins::Convert(p.format), p.width, p.height)); 1508 case _OrthancPluginService_CreateImage:
1494 } 1509 result.reset(new Image(Plugins::Convert(p.format), p.width, p.height));
1495 else 1510 break;
1496 { 1511
1497 result.reset(new ImageAccessor); 1512 case _OrthancPluginService_CreateImageAccessor:
1498 result->AssignWritable(Plugins::Convert(p.format), p.width, p.height, p.pitch, p.buffer); 1513 result.reset(new ImageAccessor);
1514 result->AssignWritable(Plugins::Convert(p.format), p.width, p.height, p.pitch, p.buffer);
1515 break;
1516
1517 case _OrthancPluginService_DecodeDicomImage:
1518 {
1519 ParsedDicomFile dicom(p.constBuffer, p.bufferSize);
1520 result.reset(Decode(dicom, p.frameIndex));
1521 break;
1522 }
1523
1524 default:
1525 throw OrthancException(ErrorCode_InternalError);
1499 } 1526 }
1500 1527
1501 *(p.target) = reinterpret_cast<OrthancPluginImage*>(result.release()); 1528 *(p.target) = reinterpret_cast<OrthancPluginImage*>(result.release());
1502 } 1529 }
1503 1530
2067 return true; 2094 return true;
2068 } 2095 }
2069 2096
2070 case _OrthancPluginService_CreateImage: 2097 case _OrthancPluginService_CreateImage:
2071 case _OrthancPluginService_CreateImageAccessor: 2098 case _OrthancPluginService_CreateImageAccessor:
2099 case _OrthancPluginService_DecodeDicomImage:
2072 ApplyCreateImage(service, parameters); 2100 ApplyCreateImage(service, parameters);
2073 return true; 2101 return true;
2074 2102
2075 default: 2103 default:
2076 { 2104 {