Click here to Skip to main content
Click here to Skip to main content

SUN Raster File Decoder

By , 10 Jul 2004
 

Sample Image - RAS_Decoder.jpg

Introduction

This article provides information on the decoder for Sun Raster files. I had been using a free image library for quiet some time. A few days back, I wanted to support the Sun Raster file format (.ras). Since the library I am currently using doesn't support this format, I started looking for a decoder. I found that the FreeImage Imaging Library supports this format. So I used this library as a reference to write a standalone decoder.

The RAS File Format

The RAS format is described here.

The RAS Header

The RAS header is as follows:

struct RASHEADER {
DWORD magic;            // Magic number
DWORD width;            // Image width in pixels
DWORD height;           // Image height in pixels
DWORD depth;           // Depth (1, 8, 24 or 32 bits) of each pixel
DWORD length;          // Image length (in bytes)
DWORD type;            // Format of file
DWORD maptype;      // Type of colormap
DWORD maplength;   // Length of colormap (in bytes) 
} RASHEADER;

Note the following:

#define RAS_MAGIC 0x59A66A95 // Magic number for Sun rasterfiles

A check for the above number should be done after reading the header information to verify if it's a SUN Raster file.

The RAS decoder consists of a class CLibRAS having the following functions:

  • BMP * LoadRAS(FILE* handle);
  • unsigned GetWidth(BMP *dib);
  • BYTE *GetBits(BMP *dib);
  • unsigned GetHeight(BMP *dib);
  • BITMAPINFO *GetInfo(BMP *dib);
  • unsigned GetLine(BMP *dib);
  • unsigned GetBPP(BMP *dib);
  • unsigned GetColorsUsed(BMP *dib);
  • RGBQUAD * GetPalette(BMP *dib);
  • unsigned GetPitch(BMP *dib);

The LoadRAS function returns the image in a DIB format which can be used with the StretchDIBits function to draw the image on the device context.

A simple usage of the class would be as follows:

CLibRAS Decoder;
BMP *dib = Decoder.LoadRAS(fopen("C:\\lady256.ras","rb"));
  
  ::StretchDIBits(AfxGetMainWnd()->GetDC()->m_hDC,
                  10,                       // Destination x
                  10,                       // Destination y
                  Decoder.GetWidth(dib),    // Destination width
                  Decoder.GetHeight(dib),   // Destination height
                  0,                        // Source x
                  0,                        // Source y
                  Decoder.GetWidth(dib),    // Source width
                  Decoder.GetHeight(dib),   // Source height
                  Decoder.GetBits(dib),     // Pointer to bits
                  Decoder.GetInfo(dib),     // BITMAPINFO
                  DIB_RGB_COLORS,           // Options
                  SRCCOPY);                 // Raster operator code

Would appreciate if you post the results after usage.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Amol Kakhandki
Web Developer
India India
Member
Amol is currently working for a software company in India.His background is an engineering degree in Industrial Electronics.
He has been implementing projects in COM,DCOM,LDAP using VC++ ,MFC,ATL.
This has to be one of my favorite card - Reward Hotel Starwood Preferred Guest Credit Card. Thanks and enjoy!

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
Questionlicense? PinmemberMember 418516812 Sep '11 - 16:32 
GeneralMy vote of 1 PinmemberMember 201045812 Apr '11 - 5:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130523.1 | Last Updated 11 Jul 2004
Article Copyright 2004 by Amol Kakhandki
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid