Помоги пожалуйста,
есть термограмма, массив данных размером 1024. В каждом элементе хранится оттенок зеленого от 0 до 255.
Как можно быстро нарисовать картинку размером 32х32 пикселя из этого массива?
Ооооо, огромное спасибо!
А то пытался попиксельно нарисовать при помощи _WinAPI_SetPixel.
Прокомментировал пример, для наглядности:
Код:
#include <GDIPlus.au3>_GDIPlus_Startup(); Задать размер картинки.Global$iWidth=32,$iHeight=32; Массив содержащий данные картинки, заполненный случайным образом.Global$aPic[$iWidth*$iHeight]For$i=0ToUBound($aPic)-1$aPic[$i]=Random(0,0xFFFFFF,1)Next; Создать структуру UINT(4 байта) с именем PIC размером высота * ширина картинки.$tStruct=DllStructCreate("uint PIC["&$iWidth*$iHeight&"]")For$i=0ToUBound($aPic)-1DllStructSetData($tStruct,"PIC",$aPic[$i],$i+1)Next; Создать картинку из структуры.$hBitmap=_GDIPlus_BitmapCreateFromScan0($iWidth,$iHeight,$GDIP_PXF32ARGB,$iWidth*4,DllStructGetPtr($tStruct,"PIC")); Сохранить в файл._GDIPlus_ImageSaveToFile($hBitmap,"pic.bmp"); Удалить ресурсы GDI+._GDIPlus_BitmapDispose($hBitmap)_GDIPlus_Shutdown()
Хелп, а почему не работает функция _GDIPlus_ImageResize с недавно созданным изображением?
Код:
#include <GDIPlus.au3>_GDIPlus_Startup(); Задать размер картинки.Global$iWidth=32,$iHeight=32; Массив содержащий данные картинки, заполненный случайным образом.Global$aPic[$iWidth*$iHeight]For$i=0ToUBound($aPic)-1$aPic[$i]=Random(0,0xFFFFFF,1)Next; Создать структуру UINT(4 байта) с именем PIC размером высота * ширина картинки.$tStruct=DllStructCreate("uint PIC["&$iWidth*$iHeight&"]")For$i=0ToUBound($aPic)-1DllStructSetData($tStruct,"PIC",$aPic[$i],$i+1)Next; Создать картинку из структуры.$hBitmap=_GDIPlus_BitmapCreateFromScan0($iWidth,$iHeight,$GDIP_PXF32ARGB,$iWidth*4,DllStructGetPtr($tStruct,"PIC"))Local$hBitmap_Scaled=_GDIPlus_ImageResize($hBitmap,320,320);resize image; Сохранить в файл._GDIPlus_ImageSaveToFile($hBitmap_Scaled,"pic.bmp"); Удалить ресурсы GDI+._GDIPlus_BitmapDispose($hBitmap)_GDIPlus_Shutdown()
Сохраняется черный экран(((((
Что не так с созданной картинкой?
С точки зрения AutoIt объекты Image и Bitmap идентичны. Фактически, в терминологии AutoIt, это не объекты, а указатели на область памяти. Поэтому можно использовать любую функцию. Приведение типов GDI+ реализует самостоятельно.
Спасибо разъяснение.
А можно суть происходящего, почему прозрачная картинка отображается при создании, а после растягивания уже не отображается?
Хотелось бы узнать эти тонкости)
Функция _GDIPlus_ImageResize не входит в gdiplus.dll, она написана для удобства. Если посмотреть реализацию этой функции, то можно увидеть, что используется копирование оригинальной картинки на grapics, связанный с новым bitmap. Новый bitmap по умолчанию имеет чёрный фон. При копировании прозрачного цвета на чёрный фон результирующий цвет будет чёрным независимо от наличия данных в RGB составляющих. Поэтому новая картинка получается чёрной.