Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Extend API with color-flow support - DO NOT MERGE #2

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions DummyLoader/Image3dSource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Image3dSource::Image3dSource() {
Image3d tmp;
{
tmp.time = f*(duration/numFrames) + startTime;
tmp.format = FORMAT_U8;
tmp.format = IMAGE_FORMAT_U8;
for (size_t i = 0; i < 3; ++i)
tmp.dims[i] = dims[i];
CComSafeArray<BYTE> data(static_cast<unsigned int>(img_buf.size()));
Expand Down Expand Up @@ -201,7 +201,7 @@ Image3d Image3dSource::SampleFrame (const Image3d & frame, Cart3dGeom out_geom,
Image3d result;
{
result.time = frame.time;
result.format = FORMAT_U8;
result.format = IMAGE_FORMAT_U8;
for (size_t i = 0; i < 3; ++i)
result.dims[i] = max_res[i];
CComSafeArray<BYTE> data(static_cast<unsigned int>(img_buf.size()));
Expand Down
63 changes: 51 additions & 12 deletions Image3dAPI/IImage3d.idl
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,34 @@ enum Image3dAPIVersion {
} Image3dAPIVersion;


typedef [
v1_enum, // 32bit enum size
helpstring("Enum of supported image types (extended upon demand).")]
enum ImageType {
IMAGE_TYPE_INVALID = 0, ///< make sure that "cleared" state is invalid
IMAGE_TYPE_TISSUE = 1, ///< grayscale B-mode image
IMAGE_TYPE_BLOOD_VEL = 2, ///< blood velocities (color-flow) (rel. to probe)
} ImageType;

typedef [
v1_enum, // 32bit enum size
helpstring("Enum of supported image formats (extended upon demand).")]
enum ImageFormat {
FORMAT_INVALID = 0, ///< make sure that "cleared" state is invalid
FORMAT_U8 = 1, ///< unsigned 8bit grayscale
IMAGE_FORMAT_INVALID = 0, ///< make sure that "cleared" state is invalid
IMAGE_FORMAT_U8 = 1, ///< unsigned 8bit grayscale
IMAGE_FORMAT_FREQ8POW8 = 2, ///< 16bit color-flow format (8bit signed frequency value, 8bit unsigned power/bandwidth value)
IMAGE_FORMAT_R8G8B8A8 = 3, ///< 32bit RGBA (alpha channel ignored)
} ImageFormat;

typedef [
v1_enum, // 32bit enum size
helpstring("Enum of supported color-map formats (extended upon demand).")]
enum ColorMapType {
TYPE_TISSUE_COLOR, ///< tisse color-map; type=R8G8B8A8 (for slicing)
TYPE_FLOW_COLOR, ///< flow color-map; type=R8G8B8A8 (for slicing, in freq&bw space)
TYPE_FLOW_ARB, ///< flow arbitration; type=FREQ8POW8 (for deciding if tissue or flow shall be shown)
} ColorMapType;


typedef [
v1_enum, // 32bit enum size
Expand Down Expand Up @@ -96,7 +116,7 @@ cpp_quote("} // extern \"C\"")
cpp_quote("")
cpp_quote("struct Image3d {")
cpp_quote(" double time = 0;")
cpp_quote(" ImageFormat format = FORMAT_INVALID;")
cpp_quote(" ImageFormat format = IMAGE_FORMAT_INVALID;")
cpp_quote(" unsigned short dims[3] = {0,0,0};")
cpp_quote(" unsigned int stride0 = 0;")
cpp_quote(" unsigned int stride1 = 0;")
Expand Down Expand Up @@ -274,25 +294,44 @@ cpp_quote("#else")
cpp_quote("static_assert(sizeof(EcgSeries) == 2*8+2*4, \"EcgSeries size mismatch\");")
cpp_quote("#endif")


[object,
oleautomation, // use "automation" marshaler (oleaut32.dll)
uuid(D7D2A41A-F738-41EB-8133-1B06DDA1FF40),
helpstring("3D image stream interface. Used to group frames sharing a common type (e.g. tissue or color-flow).")]
interface IImage3dStream : IUnknown {
[helpstring("Get stream type.")]
HRESULT GetType ([out, retval] ImageType * type);

[helpstring("Get the number of frames available")]
HRESULT GetFrameCount ([out, retval] unsigned int * size);

[helpstring("Get the time of all frames (useful for matching frame indices to ECG before retrieving image data) ")]
HRESULT GetFrameTimes ([out, retval] SAFEARRAY(double) * frame_times);

[helpstring("Get image data (const) for a given frame within a specified geometry")]
HRESULT GetFrame ([in] unsigned int index, [out, retval] Image3d * data);
};


[ object,
oleautomation, // use "automation" marshaler (oleaut32.dll)
uuid(D483D815-52DD-4750-8CA2-5C6C489588B6),
helpstring("Interface for retrieving 3D image data.")]
interface IImage3dSource : IUnknown {
[helpstring("Get the number of frames available")]
HRESULT GetFrameCount ([out,retval] unsigned int * size);
[helpstring("Get the number of streams available.")]
HRESULT GetStreamCount ([out, retval] unsigned int * size);

[helpstring("Get the time of all frames (useful for matching frame indices to ECG before retrieving image data) ")]
HRESULT GetFrameTimes ([out, retval] SAFEARRAY(double) * frame_times);
[helpstring("Get cartesian image stream. The geometry and resolution arguments are advisory, and might not be honored.\n"
"Clients should therefore check the actual geometry and resolution of the retrieved stream afterwards.")]
HRESULT GetStream ([in] int index, [in] Cart3dGeom geom, [in] unsigned int max_resolution[3], [out, retval] IImage3dStream ** stream);

[helpstring("Get image data (const) for a given frame within a specified geometry")]
HRESULT GetFrame ([in] unsigned int index, [in] Cart3dGeom geom, [in] unsigned short max_resolution[3], [out,retval] Image3d * data);

[helpstring("Get a bounding box encapsulating all image data. Can be used as intput to GetFrame to avoid cropping.")]
[helpstring("Get a bounding box encapsulating all image data. Can be used as intput to GetStream to avoid cropping.")]
HRESULT GetBoundingBox ([out,retval] Cart3dGeom * geom);

[helpstring("Retrieve color-map table for mapping image intensities to RGBx values. Length is 256.")]
HRESULT GetColorMap ([out,retval] SAFEARRAY(unsigned int) * map);
[helpstring("Retrieve color-map table for mapping image intensities to RGBx values. Length depend on format.")]
HRESULT GetColorMap ([in] ColorMapType type, [out] ImageFormat * format, [out,retval] SAFEARRAY(unsigned int) * table);

[helpstring("Get ECG data if available [optional]. Shall return S_OK with an empty EcgSeries if EGC is not available.")]
HRESULT GetECG ([out,retval] EcgSeries * ecg);
Expand Down
1 change: 1 addition & 0 deletions Image3dAPI/UNREGISTER_Image3dAPI.bat
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ reg delete "HKCR\TypeLib\{3ff1aab8-f3d8-33d4-825d-00104b3646c0}" /f 2> NUL

for %%P in (32 64) do (
:: IImage3d.idl
reg delete "HKCR\Interface\{D7D2A41A-F738-41EB-8133-1B06DDA1FF40}" /f /reg:%%P 2> NUL
reg delete "HKCR\Interface\{D483D815-52DD-4750-8CA2-5C6C489588B6}" /f /reg:%%P 2> NUL
reg delete "HKCR\Interface\{CD30759B-EB38-4469-9CA5-4DF75737A31B}" /f /reg:%%P 2> NUL
)
Expand Down