15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


CPicture - класс для отображения картинок


Автор: Dr. Yovav Gad.



Совместимость: Visual C++, Windows 95/98/2000/NT

После долгих поисков механизма загрузки JPG из ресурса и его отображения в диалоговом приложении, не увенчавшихся успехом, была предпринята попытка создания собственного класса.

Итак, был создан, очень простой и в тоже время функциональный класс. Его можно легко добавить в проект. При этом не понадобилось изобретать механизм для чтения заголовков JPEG (Класс использует интерфейс IPicture как это делает Internet Explorer)

О Проекте

Приложение слегка напоминает всем извесный просмотрщик картинок "ACDSee". Правда из-за нехватки времени проект не был доведён до совершенства.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  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; // Тоже самое что и
             // LPPICTURE (typedef IPicture __RPC_FAR *LPPICTURE)

  LONG      m_Height; // Высота в пикселях
  LONG      m_Weight; // Размер объекта картинки в 
                      //      байтах (Файл или ресурс)
  LONG      m_Width;  // Ширина в пикселях
};
//~~~~~~~~~Пример использования класса~~~~~~~~~~~~~~
//
//  Чтобы использовать функции из этого класса, необходимо добавить
//  в проект два файла "CPicture.CPP" и "CPicture.H",
//  а затем создать объект изображения и отобразить его на
//  Контексте устройства
//
//  CPicture m_Picture;  // Создаём объект изображения
//                       //    (Экземпляр этого класса)
//  #include "Picture.h" // Для создания объекта
//                       //     необходимо добавить этот файл...
//
//  Далее загружаем данные изображения в интерфейс IPicture Interface
//                        (.BMP .DIB .EMF .GIF .ICO .JPG .WMF)
//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  m_Picture.Load("Test.JPG");      // Загружаем из файла
//  m_Picture.Load(IDR_TEST, "JPG"); // Загружаем из ресурса
//  (необходимо добавить IDR_TEST в ресурсы с собственным именем
//        например - "JPG")
//  
//  Затем используем объект DC на диалоговом приложении
//                                     (CPaintDC dc(this);)
//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  m_Picture.UpdateSizeOnDC(&dc); // Получаем размерность картинки
//                                     //  в пикселях
//  m_Picture.Show(&dc,
//                 CPoint(0,0), 
//                 CPoint(m_Picture.m_Width, m_Picture.m_Height),
//                 0,0);
//  // Изменяем изначальные размеры:
//  m_Picture.Show(&dc, CRect(0,0,100,100)); 
//  // Показываем ресурс Bitmap:
//  m_Picture.ShowBitmapResource(&dc, IDB_TEST, CPoint(0,0));
//
//  ИЛИ используя указатель на "Регулярное" MFC Приложение (CDC* pDC)
//  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//  m_Picture.UpdateSizeOnDC(pDC); // Получаем размерность картинки
//                                     //  в пикселях
//  m_Picture.Show(pDC, 
//                 CPoint(0,0), 
//                 CPoint(m_Picture.m_Width, m_Picture.m_Height),
//                 0,0);
//  // Изменяем изначальные размеры:
//  m_Picture.Show(pDC, CRect(0,0,100,100));
//  // Показываем ресурс Bitmap:
//  m_Picture.ShowBitmapResource(pDC, IDB_TEST, CPoint(0,0));
//
//  Показываем информацию о картинке
//  ~~~~~~~~~~~~~~~~~~~~~~~~
//  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

Скачать демонстрационный (SDI) проект - 193Kb
Скачать исходник (только класс CPicture) - 7Kb