CPicture - The Yovav (Horror) PictureShow
Posted
by Dr. Yovav Gad
on September 17th, 2001
After many days of searching (and not finding) a way to load a JPG from a resource and show it on a *dialog based* application, I decided to take steps.
I created what I call a very *simple* and useful class. It can easily be implemented by adding it to a project. You don't have to be a real JPEG freak and invent all the header reading from the beginning (It uses the IPicture interface jst as Internet Explorer does)
About The Project
I Was a little carried away with this "ACDSee Alike" picture viewer. As it was not my main purpose - I didn't have the time to make it "Perfect". If you feel lucky and want to improve it here and there - please share it.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Picture (Implementations) Version 1.00 Routines: 4 Showing Picture Files... (.BMP .DIB .EMF .GIF .ICO .JPG .WMF) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ COPYFREE (F) - ALL RIGHTS FREE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class CPicture { public: void FreePictureData(); BOOL Load(CString sFilePathName); BOOL Load(UINT ResourceName, LPCSTR ResourceType); BOOL LoadPictureData(BYTE* pBuffer, int nSize); BOOL SaveAsBitmap(CString sFilePathName); BOOL Show(CDC* pDC, CPoint LeftTop, CPoint WidthHeight, int MagnifyX, int MagnifyY); BOOL Show(CDC* pDC, CRect DrawRect); BOOL ShowBitmapResource(CDC* pDC, const int BMPResource, CPoint LeftTop); BOOL UpdateSizeOnDC(CDC* pDC); CPicture(); virtual ~CPicture(); IPicture* m_IPicture; // Same As // LPPICTURE (typedef IPicture __RPC_FAR *LPPICTURE) LONG m_Height; // Height (In Pixels Ignor What // Current Device Context Uses) LONG m_Weight; // Size Of The Image Object In // Bytes (File OR Resource) LONG m_Width; // Width (In Pixels Ignor What // Current Device Context Uses) }; //~~~~~~~~~Example & Usage 4 Dummies~~~~~~~~~~~~~~ // // U Need 2 Add "CPicture.CPP" and "CPicture.H" Into // Your Project (From FileView) So U Will Get Control // Over The Functions In This Class, Then U Can Create // a Picture Object And Show It On a Device Context // // CPicture m_Picture; // Create a Picture Object // // (An Instance Of This Class) // #include "Picture.h" // Make Sure U Include This // // Where U Gonna Create The Object... // // Load Picture Data Into The IPicture Interface (.BMP // .DIB .EMF .GIF .ICO .JPG .WMF) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // m_Picture.Load("Test.JPG"); // Load From a File - // // Just Load It (Show Later) // m_Picture.Load(IDR_TEST, "JPG"); // Load From a Resource // //- Just Load It (Show Later) // (U Must Include IDR_TEST In Your Resources Under a Custom // Name, 4 Example - "JPG") // // When Using DC Object On a *Dialog Based* Application // (CPaintDC dc(this);) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // m_Picture.UpdateSizeOnDC(&dc); // Get Picture Dimentions // // In Pixels // m_Picture.Show(&dc, // CPoint(0,0), // CPoint(m_Picture.m_Width, m_Picture.m_Height), // 0,0); // // Change Original Dimentions: // m_Picture.Show(&dc, CRect(0,0,100,100)); // // Show Bitmap Resource: // m_Picture.ShowBitmapResource(&dc, IDB_TEST, CPoint(0,0)); // // OR When Using a Pointer On a "Regular" MFC Application (CDC* pDC) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // m_Picture.UpdateSizeOnDC(pDC); // Get Picture Dimentions In Pixels // m_Picture.Show(pDC, // CPoint(0,0), // CPoint(m_Picture.m_Width, m_Picture.m_Height), // 0,0); // // Change Original Dimentions: // m_Picture.Show(pDC, CRect(0,0,100,100)); // // Show Bitmap Resource: // m_Picture.ShowBitmapResource(pDC, IDB_TEST, CPoint(0,0)); // // Show Picture Information // ~~~~~~~~~~~~~~~~~~~~~~~~ // CString S; // S.Format("Size = %4d\nWidth = %4d\nHeight = %4d\nWeight = %4d\n", // m_Picture.m_Weight, // m_Picture.m_Width, // m_Picture.m_Height, // m_Picture.m_Weight); // AfxMessageBox(S); // //~~~~~~~~~~~~~~~~~Cut The Bull Here~~~~~~~~~~~~~~~~~~~~~
Downloads
Download demo (SDI) project - 193KbDownload source (CPicture class only) - 7Kb

Comments
There are no comments yet. Be the first to comment!