CPicture - The Yovav (Horror) PictureShow
Routines for displaying image files (.BMP .DIB .EMF .GIF .ICO .JPG .WMF)
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
So I created what I call a very simple and useful class, it can easily be implemented by adding it to a project, and you do not have to be a real JPEG freak and invent all header reading from the beginning (it uses the IPicture interface - same way as Internet Explorer does)
About The Project
I was little carried away with this "ACDSee alike" picture viewer, as it was not my main purpose - I did not have the time to make it "perfect", if you feel lucky and want to improve it here and there then please share it with me.
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(); // Same As LPPICTURE (typedef IPicture __RPC_FAR *LPPICTURE) IPicture* m_IPicture; // Height (In Pixels Ignor What Current Device Context Uses) LONG m_Height; // Size Of The Image Object In Bytes (File OR Resource) LONG m_Weight; // Width (In Pixels Ignor What Current Device Context Uses) LONG m_Width; };
//~~~~~~~~~~~~~~~~~~~~~~~~~~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 // // Create a Picture Object (An Instance Of This Class) // CPicture m_Picture; // Make Sure U Include This Where U Gonna Create The Object... // #include "Picture.h" // Load Picture Data Into The IPicture Interface (.BMP .DIB .EMF .GIF .ICO .JPG .WMF) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Load From a File - Just Load It (Show Later) // m_Picture.Load("Test.JPG"); // Load From a Resource - Just Load It (Show Later) // m_Picture.Load(IDR_TEST, "JPG"); // (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);) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // Get Picture Dimentions In Pixels // m_Picture.UpdateSizeOnDC(&dc); // 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); //