Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июня!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

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



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS