RE: Importing images
- To: mathgroup at smc.vnet.net
- Subject: [mg13004] RE: [mg12951] Importing images
- From: "Barthelet, Luc" <lucb at ea.com>
- Date: Tue, 30 Jun 1998 00:26:03 -0400
- Sender: owner-wri-mathgroup at wolfram.com
This should do it.
ReadBMPfile[filename_]:=Module[
{afile,data,validFile,width,height,planes,bitPerPixel,compression,
sizeOfBitmap,horzRes,vertRes,numOfColors,colorsImportant,bitmap,
firstImageByte,palette},
toDWORD[l_]:= Apply[Plus,l {1,256, 65536, 16777216}]; toWORD[l_]:=
Apply[Plus,l {1,256}];
afile = OpenRead[filename,DOSTextFormat->False]; data =
ReadList[afile,Byte];
Close[afile];
bitPerPixel = toWORD[data[[{29,30}]] ]; firstImageByte = toDWORD[ data[[
{11,12,13,14} ]] ]; numOfColors = toDWORD[ data[[ {47,48,49,50} ]] ];
compression = toDWORD[ data[[ {31,32,33,34} ]] ];
validFile = (compression==0)&&
(data[[{1,2}]] == {66,77}) &&
(data[[ {7,8,9,10}]] == {0,0,0,0})&&
( toDWORD[ data[[ {3,4,5,6}]]] == Length[data] ) && (firstImageByte
== 54 + 4 numOfColors)&&
((bitPerPixel==24)|| (bitPerPixel==8));
If[validFile ,
width = toDWORD[ data[[ {19,20,21,22} ]] ]; height = toDWORD[ data[[
{23,24,25,26} ]] ];
(* don't need any of those values
planes = toWORD[data[[{27,28}]] ];
sizeOfBitmap = toDWORD[ data[[ {35,36,37,38} ]] ]; horzRes = toDWORD[
data[[ {39,40,41,42} ]] ]; vertRes = toDWORD[ data[[ {43,44,45,46} ]]
]; numOfColors = toDWORD[ data[[ {47,48,49,50} ]] ]; colorsImportant =
toDWORD[ data[[ {51,52,53,54} ]] ]; *)
If[(bitPerPixel==24),
(* 24 bit stuff *)
bitmap = Take[data,{firstImageByte+1,firstImageByte+width height 3}];
bitmap = Map[Reverse,Partition[Partition[bitmap,3],width],{2}];
{bitmap,{}},
(* 8 bit stuff *)
palette =
Rest /@ (Reverse /@ Partition[Take[data,{55,55+4
numOfColors}],4]);
bitmap =
Partition[
Take[data,{firstImageByte+1,firstImageByte+1+width height
}],
width];
(* return the bitmap and the palette *)
{bitmap,palette}
],
Print["wrong format for BMP file, write more code..."];
If[ toDWORD[ data[[ {3,4,5,6}]]] == Length[data],,
Print[ "Data Length: ",Length[data]," versus:" ,
toDWORD[ data[[ {3,4,5,6}]]]," reported"]];
]
](*Module *);
ShowBMP[{bitmap_,palette_}]:=Module[
{width,height,copyPalette},
If[Length[bitmap]>0,
{height,width} = Dimensions[bitmap][[{1,2}]]; Show[Graphics[
If[palette=={},
(* for 24 bit images *)
RasterArray[
Map[Apply[RGBColor,# ]&, bitmap/255.,{2}]],
(* for 8 bit images *)
copyPalette=Map[Apply[RGBColor,# ]&, palette/255.,{1}];
RasterArray[Map[copyPalette[[#+1]]&,bitmap,{2}] ] ]
],ImageSize->{width+9,height+9},AspectRatio->(height+9)/(width+9)];
];
](*Module *);
> -----Original Message-----
> From: Carl Storrs [SMTP:carl at mdru.uc.edu]
To: mathgroup at smc.vnet.net
> Sent: Saturday, June 27, 1998 11:52 PM
> To: mathgroup at smc.vnet.net
> Subject: [mg12951] Importing images
>
> I'm doing some medical image measurement, and it would be great to do
> it
> in Mathematica.
>
> My image files are in BMP format. Does anybody know how to get the
> images into a Raster or RasterArray?
>
> Thanks in advance.
>
> ___________________
> Carl Storrs
> carl-storrs at usa.net
> 861-3100 x 5517
>
>