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();
IPicture* m_IPicture;
LONG m_Height;
LONG m_Weight;
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);
//