0023024: Update headers of OCCT files
[occt.git] / src / AlienImage / AlienImage.cxx
1 // Created on: 1998-10-21
2 // Created by: DCB
3 // Copyright (c) 1998-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
5 //
6 // The content of this file is subject to the Open CASCADE Technology Public
7 // License Version 6.5 (the "License"). You may not use the content of this file
8 // except in compliance with the License. Please obtain a copy of the License
9 // at http://www.opencascade.org and read it completely before using this file.
10 //
11 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 //
14 // The Original Code and all software distributed under the License is
15 // distributed on an "AS IS" basis, without warranty of any kind, and the
16 // Initial Developer hereby disclaims all such warranties, including without
17 // limitation, any warranties of merchantability, fitness for a particular
18 // purpose or non-infringement. Please see the License for the specific terms
19 // and conditions governing the rights and limitations under the License.
20
21
22 #include <AlienImage.hxx>
23 #include <OSD_Path.hxx>
24 #include <OSD_File.hxx>
25 #include <OSD_Protection.hxx>
26 #include <OSD_Environment.hxx>
27
28 #include <Image_Image.hxx>
29 #include <AlienImage_AlienUserImage.hxx>
30 #include <AlienImage_XAlienImage.hxx>
31 #include <AlienImage_SGIRGBAlienImage.hxx>
32 #include <AlienImage_EuclidAlienImage.hxx>
33 #include <AlienImage_SunRFAlienImage.hxx>
34 #include <AlienImage_GIFAlienImage.hxx>
35 #include <AlienImage_BMPAlienImage.hxx>
36
37 //====================================================================
38 static OSD_Environment& _CSF_DefaultImageFormat() {
39   static OSD_Environment CSF_DefaultImageFormat("CSF_DefaultImageFormat");
40   return CSF_DefaultImageFormat;
41 }
42 #define CSF_DefaultImageFormat _CSF_DefaultImageFormat()
43
44 //====================================================================
45 Standard_Boolean AlienImage::CreateImage (const TCollection_AsciiString& theFileName,
46                                           Handle(Image_Image)& theImage)
47 {
48   OSD_File file = OSD_File (OSD_Path (theFileName));
49   return AlienImage::CreateImage (file, theImage);
50 }
51
52 //====================================================================
53 Standard_Boolean AlienImage::CreateImage (const Standard_CString theFileName,
54                                           Handle(Image_Image)& theImage)
55 {
56   OSD_File file = OSD_File (OSD_Path (TCollection_AsciiString (theFileName)));
57   return AlienImage::CreateImage (file, theImage);
58 }
59
60 //====================================================================
61 Standard_Boolean AlienImage::CreateImage (OSD_File& theFile,
62                                           Handle(Image_Image)& theImage)
63 {
64   OSD_Protection          theProtection (OSD_R, OSD_R, OSD_R, OSD_R);
65   OSD_Path                thePath;
66   theFile.Path            (thePath);
67   TCollection_AsciiString theExtension  = thePath.Extension();
68   theExtension.UpperCase  ();
69
70   Handle(AlienImage_AlienUserImage) theAlienImage;
71
72   theFile.Open (OSD_ReadOnly, theProtection);
73   if (theFile.IsOpen()) {
74     if (theExtension.IsEqual (".XWD"))
75 _CreateXWD:
76       theAlienImage = new AlienImage_XAlienImage ();
77     else if (theExtension.IsEqual (".RGB"))
78 _CreateRGB:
79       theAlienImage = new AlienImage_SGIRGBAlienImage ();
80     else if (theExtension.IsEqual (".RS"))
81 _CreateRS:
82       theAlienImage = new AlienImage_SunRFAlienImage ();
83     else if (theExtension.IsEqual (".PIX"))
84 _CreatePIX:
85       theAlienImage = new AlienImage_EuclidAlienImage ();
86     else if (theExtension.IsEqual (".GIF"))
87 _CreateGIF:
88       theAlienImage = new AlienImage_GIFAlienImage ();
89     else if (theExtension.IsEqual (".BMP"))
90 _CreateBMP:
91       theAlienImage = new AlienImage_BMPAlienImage ();
92
93     else if (theExtension.IsEmpty ()) {
94       // Trye to read $CSF_DefaultImageFormat environment
95       TCollection_AsciiString theDefExt = CSF_DefaultImageFormat.Value();
96       theDefExt.Prepend (".");
97       thePath.SetExtension (theDefExt);
98       theExtension = theDefExt;
99       theExtension.UpperCase ();
100       if      (theExtension.IsEqual (".XWD")) goto _CreateXWD;
101       else if (theExtension.IsEqual (".RGB")) goto _CreateRGB;
102       else if (theExtension.IsEqual (".RS"))  goto _CreateRS;
103       else if (theExtension.IsEqual (".PIX")) goto _CreatePIX;
104       else if (theExtension.IsEqual (".GIF")) goto _CreateGIF;
105       else if (theExtension.IsEqual (".BMP")) goto _CreateBMP;
106       else                                    return Standard_False;
107     } else {
108       return Standard_False;
109     }
110
111     if (!theAlienImage -> Read (theFile)) {
112       theFile.Close ();
113       return Standard_False;
114     }
115
116     theImage = theAlienImage -> ToImage ();
117     theFile.Close ();
118     return (!theImage.IsNull());
119   }
120   return Standard_False;
121 }
122
123 //====================================================================
124 Standard_Boolean AlienImage::LoadImageFile(const Standard_CString anImageFile,
125                                            Handle(Image_Image)& myImage,
126                                            Standard_Integer& aWidth,
127                                            Standard_Integer& aHeight)
128 {
129   // Try to load new image
130   myImage.Nullify ();
131   if (AlienImage::CreateImage (anImageFile, myImage)) {
132     // New image loaded
133 //_ExitOK:
134     aWidth  = myImage -> Width ();
135     aHeight = myImage -> Height ();
136     return Standard_True;
137   } else {
138     // Could not load new image
139 //_ExitError:
140     myImage.Nullify ();
141     aWidth = aHeight = 0;
142     return Standard_False;
143   }
144 }
145