Click here to Skip to main content
Licence 
First Posted 10 Jul 2004
Views 29,533
Downloads 393
Bookmarked 19 times

SUN Raster File Decoder

By Amol Kakhandki | 10 Jul 2004
This article provides information on the decoder for Sun Raster files.
3 votes, 37.5%
1

2
2 votes, 25.0%
3
1 vote, 12.5%
4
2 votes, 25.0%
5
2.59/5 - 8 votes
μ 2.59, σa 3.02 [?]

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. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Questionlicense? PinmemberMember 418516817:32 12 Sep '11  
GeneralMy vote of 1 PinmemberMember 20104586:41 12 Apr '11  

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

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