Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Вывод изображения на Ассемблере с помощью OLE

21.09.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я уже разбирал загрузку и вывод изображения с помощью GDI+, но это далеко не единственный способ загрузки изображения из файла. В дополнение к этой теме предлагаю рассмотреть еще один способ, как можно загрузить изображение из файла средствами OLE. Сперва пропишем GUID объекта IID_IPicture и создадим структуру для методов интерфейса IPicture. В MSDN методы перечислены в алфавитном порядке, а не так, как они фактически идут в интерфейсе, имейте это в виду.
  1. ; GUID {7BF80980-BF32-101A-8BBB-00AA00300CAB}
  2. IID_IPicture       dd 7BF80980h
  3.                    dw 0BF32h
  4.                    dw 0101Ah
  5.                    db 08Bh, 0BBh, 0h, 0AAh, 0h, 030h, 00Ch, 0ABh
  6.  
  7. ; IPicture Interface
  8. struct IPicture
  9.     ; IUnknown
  10.     QueryInterface dd ?
  11.     AddRef         dd ?
  12.     Release        dd ?
  13.  
  14.     ; IPicture
  15.     get_Handle     dd ?
  16.     get_hPal       dd ?
  17.     get_Type       dd ?
  18.     get_Width      dd ?
  19.     get_Height     dd ?
  20.     Render         dd ?
  21.     set_hPal       dd ?
  22.     get_CurDC      dd ?
  23.     SelectPicture  dd ?
  24.     get_KeepOriginalFormat dd ?
  25.     set_KeepOriginalFormat dd ?
  26.     PictureChanged dd ?
  27.     SaveAsFile     dd ?
  28.     get_Attributes dd ?
  29.     SetHdc         dd ?
  30. ends
Итак, у нас есть файл с изображением, который надо загрузить в память и затем выполнить с ним нужные действия, например, вывести на форму. Первым делом загружаем его целиком в память.
  1.         ; Прочитать файл в память
  2.         invoke  _lopen,fname,OF_READ
  3.         cmp     eax,-1
  4.         je      loc_free_1
  5.         mov     ebx,eax
  6.  
  7.         ; Получить размер файла
  8.         invoke  GetFileSize,ebx,NULL
  9.         mov     [file_size],eax
  10.  
  11.         ; Выделить память под файл
  12.         invoke  GetProcessHeap
  13.         mov     [hProcHeap],eax
  14.         invoke  HeapAlloc,[hProcHeap],0,[file_size]
  15.         mov     [hLock],eax
  16.  
  17.         ; Загрузить картинку в память
  18.         invoke  _lread,ebx,[hLock],[file_size]
  19.         invoke  _lclose,ebx
Тут ничего сложного, в куче выделяется блок памяти под размер файла картинки, затем в него считывается содержимое файла.

Читать статью целиком »
Просмотров: 815 | Комментариев: 0

Shutter Count Viewer 1.8

16.08.2019 | Категория: Мои программы | Автор: ManHunter

Скриншот программы Shutter Count Viewer

Программа Shutter Count Viewer предназначена для проверки зеркальных фотоаппаратов производства Nikon, Pentax, Samsung, Sony и некоторых моделей зеркальных фотоаппаратов Canon перед покупкой или продажей, чтобы узнать реальный пробег камеры. Для этого достаточно сделать снимок в формате JPEG или RAW и открыть фотографию в программе. Если фотоаппарат поддерживает эту функцию, то Shutter Count Viewer сразу же покажет счетчик сделанных кадров, информацию о дате съемки, версии программного обеспечения, производителе и модели камеры, а также комментарии и описания фотографии, если в фотоаппарате можно устанавливать эти параметры. Счетчик кадров отображается не только в числовом виде, но и в процентном соотношении от заявленного производителем ресурса затвора. Это позволяет наглядно оценить активность использования камеры. Но все же помните, что ресурс затвора - это не время до поломки фотоаппарата, а количество кадров, которое камера гарантированно сделает при условии правильной эксплуатации.

Читать статью целиком »
Просмотров: 242896 | Комментариев: 291

Градиентный фон на PHP

31.07.2019 | Категория: Web-мастеру и не только | Автор: ManHunter

Градиентный фон на PHP

Продолжаем работать с графикой на PHP. Сегодня будем рисовать градиентную заливку фона, когда один цвет плавно перетекает в другой.

Читать статью целиком »
Просмотров: 583 | Комментариев: 0

Получение реального формата изображения

08.04.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Одно из основных правил при разработке web-приложений - не доверять никаким данным, полученным от пользователя. Они могут быть перепутаны случайно, но могут быть специально модифицированы в злонамеренных целях. Это касается в том числе и загружаемых изображений. Чтобы применять к ним функции типа ImageCreateFromXXX, просто ориентироваться на расширение файла недостаточно, оно запросто может не соответствовать содержимому. Для определения реального типа изображения я всегда проверяю внутренний формат файла, его служебные заголовки, и только на основании этого принимаю решение, как обрабатывать этот файл. Для этого у меня написана вот такая функция:
  1. //-------------------------------------------------------------------
  2. // Функция получения реального формата изображения
  3. // (C) ManHunter / PCL
  4. // http://www.manhunter.ru
  5. //-------------------------------------------------------------------
  6. function get_real_image_type($file_path) {
  7.   // По умолчанию файл имеет неизвестный формат
  8.   $type=false;
  9.  
  10.   // Анализ по внутренней структуре файла
  11.   if ($f=fopen($file_path,'r')) {
  12.     $data=fread($f,20);
  13.     fclose($f);
  14.     // Заголовок файла GIF
  15.     if (substr($data,0,3)=='GIF'
  16.       && (substr($data,12,1)=="\x00" 
  17.       || substr($data,12,1)=="\x01")) {
  18.       // Проверка на классические сплойты
  19.       if (strpos(substr($data,6,4),'/*')!==false 
  20.         || strpos(substr($data,6,4),'//')!==false) {
  21.         $type=false;
  22.       }
  23.       else {
  24.         // Проверка на более хитрые сплойты
  25.         $tmp=preg_replace('/[^\("\']/','',substr($data,6,4));
  26.         if ($tmp=='("' || $tmp=='(\'') {
  27.           $type=false;
  28.         }
  29.         else {
  30.           $type='gif';
  31.         }
  32.       }
  33.     }
  34.     // Заголовок файла PNG
  35.     elseif (substr($data,0,8)==chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
  36.       $type='png';
  37.     }
  38.     // Заголовок файла JPEG
  39.     elseif (substr($data,0,3)==chr(255).chr(216).chr(255)) {
  40.       $type='jpg';
  41.     }
  42.   }
  43.   return $type;
  44. }
Единственный параметр $file_path - путь к проверяемому файлу. На выходе строка с реальным типом изображения или false, если файл не является изображением.

Кроме определения типа изображения функция также проверяет GIF-файлы на наличие в них вредоносного кода. Из всех эксплойтов, которые я встречал внедренными в гифки, не прошел ни один. Если вдруг найдете образец зловреда, который не обнаруживается этой функцией, то пришлите его мне, пожалуйста, я с удовольствием доработаю проверку.

Просмотров: 591 | Комментариев: 5

Рамка для фото в виде смартфона

25.11.2018 | Категория: Web-мастеру и не только | Автор: ManHunter

Рамка для фото в виде смартфона

Для одной презентации понадобилось достаточно большое количество картинок, на которых представлены скриншоты мобильной версии продукта. С самими картинками проблем не возникло, нащелкали на смартфонах сколько надо скриншотов. Согласно поставленной задаче, для пущей убедительности картинки должны быть, так сказать, "в интерьере", то есть как будто отрисованные на экране смартфонов. Конечно, фотошоп никто не отменял, можно было заморочиться и наделать все ручками, но программистское мышление взяло вверх. Как верно подметил герой одного старого мультика, "лучше день потерять, зато потом за пять минут долететь".

Читать статью целиком »
Просмотров: 900 | Комментариев: 4

prev 01 02 03 04 05 06 07 08 09 ... 16
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2020
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.16 сек. / MySQL: 3 (0.0574 сек.) / Память: 5 Mb
Наверх