<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi All,<br><br>I am trying to run a program for 3d rendering of DICOM images , using java on win vista 32 - bit using vtk 5.4.2 and am getting the following EXCEPTION_ACCESS_VIOLATION.<br><br>An unexpected error has been detected by Java Runtime Environment:<br>#<br># EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x59bf3b3f, pid=27652, tid=27836<br>#<br># Java VM: Java HotSpot(TM) Client VM (1.6.0-b105 mixed mode, sharing)<br># Problematic frame:<br># C [vtkVolumeRendering.dll+0x313b3f]<br>#<br># An error report file with more information is saved as hs_err_pid27652.log<br>#<br># If you would like to submit a bug report, please visit:<br># http://java.sun.com/webapps/bugreport/crash.jsp<br><br>Looks like a memory leak somewhere but am not able to figure out where it is.<br><br>Here is the main class : <br><br>import vtk.*;<br><br>public
class WrapperVtkRenderVolume {<br> <br> vtkRenderer renderer = new vtkRenderer();<br> vtkRenderWindow renderWindow = new vtkRenderWindow();<br> vtkRenderWindowInteractor renInteractor = new vtkRenderWindowInteractor();<br> vtkImageData imageData = new vtkImageData();<br> vtkPiecewiseFunction opacityTransferFunction = new vtkPiecewiseFunction();<br> vtkVolumeProperty volumeProperty = new vtkVolumeProperty();<br> vtkVolume volume = new vtkVolume();<br> vtkVolumeTextureMapper3D volumeMapper = new vtkVolumeTextureMapper3D();<br> vtkColorTransferFunction colorTransferFunction = new vtkColorTransferFunction();<br> vtkFixedPointVolumeRayCastMapper volumeMapperSoftware = new vtkFixedPointVolumeRayCastMapper();<br><br> public
WrapperVtkRenderVolume(int width, int height) {<br> ResetSize(width, height);<br> SetupSceneBasics();<br> }<br><br> private void ResetSize(int width, int height) {<br> <br> renderWindow.SetSize(width, height);<br> <br> }<br><br> private void SetupSceneBasics() {<br> <br> renderer.SetBackground(0, 0, 0);<br> renderWindow.AddRenderer(renderer);<br> renInteractor.SetRenderWindow(renderWindow);<br> <br> }<br><br> public boolean LoadVolumeFromFolder(String strFolderPath)
{<br> <br> vtkDICOMImageReader imageReader = new vtkDICOMImageReader();<br> <br> int channels = imageReader.GetNumberOfScalarComponents();<br> <br> if (channels == 1) {<br> loadGrayScaleDataSet(imageReader.GetOutput());<br> setupRendererMIP();<br> } else {<br> System.out.println("unsupported number of channels in dicom dataset");<br> return false;<br> }<br> <br>
imageReader.Delete();<br> renderer.ResetCamera();<br> return true;<br> }<br><br> private boolean setupRendererMIP() {<br> volumeProperty.SetColor(colorTransferFunction);<br> volumeProperty.SetScalarOpacity(opacityTransferFunction);<br> volumeProperty.SetInterpolationTypeToLinear();<br> volumeProperty.ShadeOff();<br> volume.SetProperty(volumeProperty);<br> <br> volumeMapperSoftware.SetInput(imageData);<br> volumeMapperSoftware.SetSampleDistance(1.0);<br>
volumeMapperSoftware.SetBlendModeToMaximumIntensity();<br> volume.SetMapper(volumeMapperSoftware);<br> renderer.AddVolume(volume);<br> return true;<br> <br> }<br><br> private void loadGrayScaleDataSet(vtkImageData getOutput) {<br> <br> imageData.DeepCopy(getOutput);<br> double initialWindow = imageData.GetScalarRange()[1] - imageData.GetScalarRange()[0];<br> double initialLevel = initialWindow/2.0;<br> VtkObserverWindowLevel observerWindowLevel = new VtkObserverWindowLevel(initialWindow, initialLevel, renInteractor, <br>
opacityTransferFunction, colorTransferFunction);<br> <br> <br> }<br><br> public void Start() {<br> renInteractor.Initialize();<br> renInteractor.Start();<br> <br> }<br><br>}<br><br>the other class VtkObserverWindowLevel is :<br><br>import vtk.*;<br><br>public class VtkObserverWindowLevel {<br> <br> private vtkRenderWindowInteractor renInteractor;<br> private vtkPiecewiseFunction opacityTransferFunction;<br> private vtkColorTransferFunction colorTransferFunction;<br> private double initialLevel;<br> private double initialWindow;<br> private int lastMouseY;<br>
private int lastMouseX;<br><br> public VtkObserverWindowLevel(double initialWindow, double initialLevel,<br> vtkRenderWindowInteractor renInteractor,<br> vtkPiecewiseFunction opacityTransferFunction,<br> vtkColorTransferFunction colorTransferFunction) {<br> this.renInteractor = renInteractor;<br> this.opacityTransferFunction = opacityTransferFunction;<br> this.colorTransferFunction = colorTransferFunction;<br> this.initialLevel = initialLevel;<br> this.initialWindow = initialWindow;<br> int lastMouseX = 0;<br> int
lastMouseY = 0;<br> <br> doWindowLevel();<br> }<br><br> private void doWindowLevel() {<br>int[] currPosition;<br> <br> currPosition = renInteractor.GetEventPosition();<br> initialLevel -= (currPosition[1] - lastMouseY);<br> initialWindow += ( currPosition[0] - lastMouseX);<br> <br> lastMouseX = currPosition[0];//current x<br> lastMouseY = currPosition[1];//current y<br> <br> // Alter the color and opacity transfer functions <br>
opacityTransferFunction.RemoveAllPoints();<br> opacityTransferFunction.AddPoint(initialLevel - 0.5 * initialWindow, 0.0);<br> opacityTransferFunction.AddPoint(initialLevel + 0.5 * initialWindow, 1.0);<br> <br> colorTransferFunction.RemoveAllPoints();<br> colorTransferFunction.AddRGBSegment(initialLevel - 0.5 * initialWindow, 0.0, 0.0, 0.0,<br> initialLevel + 0.5 * initialWindow, 1.0, 1.0, 1.0);<br> <br> // Re-render.<br> renInteractor.Modified();<br> renInteractor.Render();<br> <br>
}<br><br>}<br><br><br>Can anyone please help me figuring out the cause.<br></td></tr></table><br>