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

fix(color volume viewport): fix incorrect property on volume actor #683

Merged
merged 5 commits into from
Jul 11, 2023

Conversation

sedghi
Copy link
Member

@sedghi sedghi commented Jul 10, 2023

Context

Webloader was returning RGBA true which volume viewport could not handle. It is fixed now. Also the volume viewports color was not working either because of it is changed now to reflect setIndependentComponents(false) . In addition streaming into the volume for color was not working since we had a short circute

Changes & Results

  • Modify webloader to be volumetric
  • add setIndependentComponents for color volume actor
  • !isColorImage(imageFrame.photometricInterpretation) is not necessary in decdeImageFrame

Testing

yarn run example webloader

should work now

https://deploy-preview-683--cornerstone-3d-docs.netlify.app/live-examples/webloader

Checklist

PR

  • [] My Pull Request title is descriptive, accurate and follows the
    semantic-release format and guidelines.

Code

Public Documentation Updates

  • [] The documentation page has been updated as necessary for any public API
    additions or removals.

Tested Environment

  • [] "OS:
  • [] "Node version:
  • [] "Browser:

sedghi added 3 commits July 7, 2023 17:38
…handling

- Added support for volume viewports in the webLoader example
- Created new HTML elements for volume viewports and set their dimensions
- Updated the rendering engine to include the new volume viewports
- Implemented loading and rendering of volume data in the volume viewports
- Modified image loading logic to convert RGBA format to RGB format
- Updated image metadata provider to add support for volume metadata
- Improved performance by reducing memory duplication during image loading
- Made necessary adjustments to accommodate the change in dimensions in the streaming image volume loader class
@netlify
Copy link

netlify bot commented Jul 10, 2023

Deploy Preview for cornerstone-3d-docs ready!

Name Link
🔨 Latest commit ab55c52
🔍 Latest deploy log https://app.netlify.com/sites/cornerstone-3d-docs/deploys/64ad7c4a4e558c0008accd8d
😎 Deploy Preview https://deploy-preview-683--cornerstone-3d-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@sedghi sedghi requested a review from wayfarer3130 July 10, 2023 18:10
@sedghi sedghi changed the title fix/dicom color fix(color volume viewport): fix incorrect property on volume actor Jul 10, 2023
// @ts-ignore
const pixelDataRGBA = image.getPixelData();
const pixelDataRGB = image.getPixelData();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you need yet another image data array? You don't even appear to use targetArray, so can you throw it away entirely? I don't get this logic here.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

targetArray is used to view the portion of the full volume at the offset and length, we need it to fill the volume

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I see what you are doing here - the target array is created from the passed in arrayBuffer instance, so it is a view onto the destination object and you are setting it. Missed that and thought you were creating a new instance.
You can avoid the copy entirely by passing targetBuffer into getPixelData and creating the Uint8array view inside the getPixelData. Then, that getPixelData has enough information to do a bounds check to see that nothing is being cut off, and to throw an exception if the provided array is too small.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is not about only volume viewport and target buffer, it should handle both cases (Stack and volume) so I don't want to modify the getPixelData since that correctly return the pixelData for stack viewport, does that makes sense?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is why I would put the logic into getPixelData, setting it up as an optional parameter. The return value will be identical in both cases, just if you are passed an array buffer, it uses that array buffer (+ offsets info), otherwise create new data. That prevents the copy operation entirely, while being 100% compatible with either call method.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok applied it

@sedghi sedghi requested a review from wayfarer3130 July 11, 2023 03:03
@sedghi sedghi merged commit dbc40e9 into main Jul 11, 2023
@sedghi sedghi deleted the fix/dicom-color branch August 2, 2023 20:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants