<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>

<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7226.0">
<TITLE>Re: [vtkusers] read Analyze files with VTK</TITLE>
</HEAD>
<BODY>
<DIV id=idOWAReplyText56351 dir=ltr>
<DIV dir=ltr><FONT face=Arial color=#000000 size=2>Hallo Tron,</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>I am currently coding java so I wrote my 
own routines, based on the following PDF documentation: <A 
href="http://www.mayo.edu/bir/PDF/ANALYZE75.pdf">http://www.mayo.edu/bir/PDF/ANALYZE75.pdf</A></FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2>It's quick &amp; dirty but does the job 
well I guess. Mail me if you want the source.</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>Thanks for the help,</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2>Wouter</FONT></DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV dir=ltr><FONT face=Arial size=2></FONT>&nbsp;</DIV></DIV>
<DIV dir=ltr><BR>
<HR tabIndex=-1>
<FONT face=Tahoma size=2><B>Van:</B> vtkusers-bounces@vtk.org namens Tron 
Darvann<BR><B>Verzonden:</B> do 4/21/2005 11:17<BR><B>Aan:</B> vtkusers@vtk.org; 
Cuypers Wouter<BR><B>Onderwerp:</B> Re: [vtkusers] read Analyze files with 
VTK<BR></FONT><BR></DIV>
<DIV>
<P><FONT size=2>Hello Wouter,<BR>I use vtkImageReader which can read a single 
.img Analyze file, and is not restricted to 16 bit data.<BR>The way I read the 
header information in the .hdr file is not optimal.&nbsp; Maybe you can solve 
this more<BR>elegantly.&nbsp; Here below is my ReadAnalyzeImage tcl 
procedure.<BR>Tron Darvann<BR><BR>proc ReadAnalyzeImage {infilename} {<BR>&nbsp; 
# NOTE: This routine can presently only read Analyze headers written in 
native<BR>&nbsp; # format, i.e. on the same type of machine as we now try to 
read it.&nbsp; This is due<BR>&nbsp; # to the tcl command binary scan that 
cannot read floating point values unless native.<BR>&nbsp; global xpix ypix zpix 
xs ys zs<BR>&nbsp; source vtkImageInclude.tcl<BR>&nbsp; set indir [file rootname 
$infilename]<BR>&nbsp; set img_extension ".img"<BR>&nbsp; set imgname 
$indir$img_extension<BR>&nbsp; imreader Delete<BR>&nbsp; vtkImageReader 
imreader<BR>&nbsp; # Get info from Analyze header<BR>&nbsp; set fileId [open 
$infilename r]<BR>&nbsp; set var [read $fileId 4]<BR>&nbsp; binary scan $var i 
hsize<BR><BR>&nbsp; if { $hsize == 348 } {<BR>&nbsp;&nbsp;&nbsp; # We read the 
long integer 348 correctly.&nbsp; Is written on native 
machine.<BR>&nbsp;&nbsp;&nbsp; set native 
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp; } else 
{<BR>&nbsp;&nbsp;&nbsp; # We did not read the long integer 348 correctly.&nbsp; 
Possibly written on other machine.<BR>&nbsp;&nbsp;&nbsp; # Try to read it 
again.<BR>&nbsp;&nbsp;&nbsp; close $fileId<BR>&nbsp;&nbsp;&nbsp; set fileId 
[open $infilename r]<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 
4]<BR>&nbsp;&nbsp;&nbsp; binary scan $var I hsize<BR>&nbsp;&nbsp;&nbsp; if { 
$hsize == 348 } {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # We read the long integer 
348 correctly.&nbsp; Is written on another 
machine.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set native 0<BR>&nbsp;&nbsp;&nbsp; } 
else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # We did not read the long integer 348 
correctly.&nbsp; Not Analyze format.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
notify_error "Could not read file header. Possibly corrupt or non-Analyze 
format"<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return<BR>&nbsp;&nbsp;&nbsp; 
}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp; 
}<BR>&nbsp; if { $native == 0 } {<BR>&nbsp;&nbsp;&nbsp; notify_error "Analyze 
file must be in native format.&nbsp; Try .hea or convert to 
native."<BR>&nbsp;&nbsp;&nbsp; return -1<BR>&nbsp;&nbsp;&nbsp; #set var [read 
$fileId 28]<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 
4]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var I extent<BR>&nbsp;&nbsp;&nbsp; #set 
var [read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 
2]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var S ndims<BR>&nbsp;&nbsp;&nbsp; #set 
var [read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var S 
xs<BR>&nbsp;&nbsp;&nbsp; #notify $xs xs<BR>&nbsp;&nbsp;&nbsp; #set var [read 
$fileId 2]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var S ys<BR>&nbsp;&nbsp;&nbsp; 
#set var [read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var S 
zs<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 22]<BR>&nbsp;&nbsp;&nbsp; #set 
var [read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var S 
datatype<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; 
#binary scan $var S bitpix<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 
2]<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; #set 
var [read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var f 
xpix<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; 
#binary scan $var f ypix<BR>&nbsp;&nbsp;&nbsp; #set var [read $fileId 
4]<BR>&nbsp;&nbsp;&nbsp; #binary scan $var f zpix<BR>&nbsp;&nbsp;&nbsp; #set 
xpix 1.0<BR>&nbsp;&nbsp;&nbsp; #set ypix 1.0<BR>&nbsp;&nbsp;&nbsp; #set zpix 
1.0<BR>&nbsp;&nbsp;&nbsp; #imreader 
SetDataByteOrderToBigEndian<BR>&nbsp;&nbsp;&nbsp; #EditHeader<BR>&nbsp; } else 
{<BR>&nbsp;&nbsp;&nbsp; # Is in native format.<BR>&nbsp;&nbsp;&nbsp; set var 
[read $fileId 28]<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 
4]<BR>&nbsp;&nbsp;&nbsp; binary scan $var i extent<BR>&nbsp;&nbsp;&nbsp; set var 
[read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 
2]<BR>&nbsp;&nbsp;&nbsp; binary scan $var s ndims<BR>&nbsp;&nbsp;&nbsp; set var 
[read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; binary scan $var s 
xs<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; binary 
scan $var s ys<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 
2]<BR>&nbsp;&nbsp;&nbsp; binary scan $var s zs<BR>&nbsp;&nbsp;&nbsp; set var 
[read $fileId 22]<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 
2]<BR>&nbsp;&nbsp;&nbsp; binary scan $var s datatype<BR>&nbsp;&nbsp;&nbsp; set 
var [read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; binary scan $var s 
bitpix<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 2]<BR>&nbsp;&nbsp;&nbsp; set 
var [read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 
4]<BR>&nbsp;&nbsp;&nbsp; binary scan $var f xpix<BR>&nbsp;&nbsp;&nbsp; set var 
[read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; binary scan $var f 
ypix<BR>&nbsp;&nbsp;&nbsp; set var [read $fileId 4]<BR>&nbsp;&nbsp;&nbsp; binary 
scan $var f zpix<BR>&nbsp; }<BR>&nbsp;&nbsp;&nbsp; if {($bitpix != 8) &amp;&amp; 
($bitpix != 16) } {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notify_error "Sorry, image 
must be 8 or 16 bit in current landmarker implementation."<BR>&nbsp;&nbsp;&nbsp; 
}<BR>&nbsp; close $fileId<BR>&nbsp; set hx [expr $xs - 1 ]<BR>&nbsp; set hy 
[expr $ys - 1 ]<BR>&nbsp; set hz [expr $zs - 1 ]<BR>&nbsp; imreader 
SetDataByteOrderToLittleEndian<BR>&nbsp; imreader SetFileDimensionality 
3<BR>&nbsp; imreader SetDataExtent 0 $hx 0 $hy 0 $hz<BR>&nbsp; imreader 
SetDataSpacing $xpix $ypix $zpix<BR>&nbsp; imreader SetFileName 
$imgname<BR>&nbsp; imreader SetHeaderSize 0<BR>&nbsp; if {$bitpix == 16} 
{<BR>&nbsp;&nbsp;&nbsp; imreader SetDataScalarTypeToShort<BR>&nbsp; }<BR>&nbsp; 
if {$bitpix == 8} {<BR>&nbsp;&nbsp;&nbsp; imreader 
SetDataScalarTypeToUnsignedChar<BR>&nbsp; }<BR><BR>&nbsp; #imreader SetDataMask 
0x7fff<BR>&nbsp; #reader DebugOn<BR>&nbsp; #reader Update<BR><BR>&nbsp; # We set 
as default that image is to be flipped in y (needed to fit with Mvox)<BR>&nbsp; 
set ImageFlipY 1<BR>&nbsp;<BR>&nbsp; if {$ImageFlipY == 1} {<BR>&nbsp; # Flip 
volume in y<BR>&nbsp;<BR>&nbsp; vtkImageFlip reslice1<BR>&nbsp;&nbsp;&nbsp; 
reslice1 SetInput [imreader GetOutput]<BR>&nbsp;&nbsp;&nbsp; reslice1 
SetFilteredAxis 1<BR>&nbsp; }<BR><BR><BR>&nbsp; viewer Delete<BR>&nbsp; 
vtkImageViewer viewer<BR>&nbsp; viewer SetInput [imreader GetOutput]<BR>&nbsp; 
viewer SetZSlice 0<BR>&nbsp; #viewer SetColorWindow 2000<BR>&nbsp; #viewer 
SetColorLevel 1000<BR>&nbsp; #viewer DebugOn<BR>&nbsp; #viewer 
Render<BR><BR>&nbsp; viewer SetPosition 50 50<BR><BR>&nbsp; #make 
interface<BR>&nbsp; source 
ImageViewerInterface.tcl<BR><BR>}<BR>_______________________________________________<BR>This 
is the private VTK discussion list.<BR>Please keep messages on-topic. Check the 
FAQ at: <A 
href="http://www.vtk.org/Wiki/VTK_FAQ">http://www.vtk.org/Wiki/VTK_FAQ</A><BR>Follow 
this link to subscribe/unsubscribe:<BR><A 
href="http://www.vtk.org/mailman/listinfo/vtkusers">http://www.vtk.org/mailman/listinfo/vtkusers</A><BR></FONT></P></DIV>

</BODY>
</HTML>