Показать полную графическую версию : Resources.au3 - загрузить файл из ресурсов _GDIPlus_ImageLoadFromFile()
FlatX007
23-04-2010, 21:57
Как мне загрузить файл из ресурсов.
Пишу ,что - то вроде этого (перепробовал много вариантов) ничего не получается :(
$Image = _ResourceGet("IMAGE")
$hImage = _GDIPlus_ImageLoadFromFile($Image)
Как мне загрузить файл из ресурсов »
Куда потом нужно это применить, вот в чём вопрос. _ResourceGet возвращает указатель на ресурс, а _GDIPlus_ImageLoadFromFile работает с файлом.
Можно конечно сохранить ресурс в файл, используя _ResourceSaveToFile, а можно получить hImage используя _ResourceGetAsImage.
$hImage = _ResourceGetAsImage("IMAGE")
И конечно же в таких случаях желательно прикреплять ссылку на такие внешние библиотеки как Resources.au3: http://www.autoitscript.com/forum/index.php?showtopic=51103
FlatX007
24-04-2010, 10:40
_ResourceGetAsImage() я пробовал так .... нет изображения.
Функцией _ResourceSaveToFile() файлы на жеский диск я сохранять не хочу.
А можно рабочий пример ?
можно рабочий пример ? »
Э нет, это сначала тебе нужно привести пример где оно не работает, как я уже писал:
Куда потом нужно это применить, вот в чём вопрос »
FlatX007
24-04-2010, 16:54
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Run_AU3Check=n
#AutoIt3Wrapper_Run_After=ResHacker.exe -add %out%, %out%, Arrow.jpg, rcdata, Arrow, 0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GDIPlus.au3>
#include <Resources.au3>
_GDIPlus_Startup ()
$Image = _ResourceGetAsImage("Arrow")
$hImage = _GDIPlus_ImageLoadFromFile($Image)
$sCLSID = _GDIPlus_EncodersGetCLSID ("JPG")
$tData = DllStructCreate("int Data")
DllStructSetData($tData, "Data", $GDIP_EVTTRANSFORMROTATE90)
$tParams = _GDIPlus_ParamInit(1)
_GDIPlus_ParamAdd ($tParams, $GDIP_EPGTRANSFORMATION, 1, $GDIP_EPTLONG, DllStructGetPtr($tData, "Data"))
_GDIPlus_ImageSaveToFileEx ($hImage, @ScriptDir & "\arrow1.jpg", $sCLSID, DllStructGetPtr($tParams))
$Form1 = GUICreate("", 236, 133)
$Pic1 = GUICtrlCreatePic($hImage, 16, 16, 100, 100) ; Тут должно быть изображение из ресурсов.
$Pic2 = GUICtrlCreatePic(@ScriptDir & "\arrow1.jpg", 120, 16, 100, 100)
;~ $Pic3 = GUICtrlCreatePic("", 16, 16, 100, 100)
;~ _ResourceSetImageToCtrl($Pic3, "Arrow")
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
_GDIPlus_ShutDown ()
Exit
EndSwitch
WEnd
Мне в принципе наверное понятна основная суть проблемы - я недавно тоже пытался реализовать загрузку изображения из памяти и вывод в окно, чтоб не использовать фун-ю FileInstall() с последующей загрузкой из картинки из файла, но, во первых, у меня с недавних пор очень мало свободн. времени, а во вторых, я не очень дружу с типизированными ЯП(а то бы давно уже кодил на С++).
Поэтому попытка реализации пока безуспешна...
Вот, то что удалось нагуглить по теме(ссылки на исходники С++) -
для загрузки BMP, GIF, JPEG/JPG, ICO, WMF, EMF и др. ресурсов (http://forum.sources.ru/index.php?showtopic=208869)
для загрузки PNG (http://www.rsdn.ru/forum/winapi/2586633.all.aspx)
Вот код скопированный из функции _ScreenCapture_Capture ($h_Src_Img - хендл обьекта для копирования):
Local $hWnd = _WinAPI_GetDesktopWindow()
Local $hDDC = _WinAPI_GetDC($hWnd)
Local $hCDC = _WinAPI_CreateCompatibleDC($hDDC)
Local $hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iW, $iH)
_WinAPI_SelectObject($hCDC, $hBMP)
_WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, $iLeft, $iTop, $h_Src_Img)
Все остальные функции WinAPI нужно обрабатывать через DllCall - у меня в версии 3.3.2.0 для них еще UDF-обертку не прикрутили.
Ребята вы чо????????Это же элементарно ... даже удф вот эта не нужнаResources.au3: http://www.autoitscript.com/forum/in...howtopic=51103 »
#include <winapi.au3>
#include <Constants.au3 >
#include <gdiplus.au3>
$lib=_WinAPI_LoadLibrary(@systemdir&"\logonui.exe")
$bmp=_WinAPI_LoadImage($lib,100,$IMAGE_BITMAP,0,0,"")
$gui=GUICreate("",@DesktopWidth,@DesktopHeight)
GUISetState()
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP ($bmp)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($gui)
_GDIPlus_GraphicsDrawImage($hGraphic,$hImage,0,0)
Sleep(5000)
_WinAPI_FreeLibrary($lib)
FlatX007, Ах да ,конкретно в вашем случае надо вот это
$Image = _ResourceGetAsImage("Arrow")
$hImage = _GDIPlus_ImageLoadFromFile($Image) »
заменить на это
$lib=_WinAPI_LoadLibrary(@ScriptFullPath)
$bmp=_WinAPI_LoadImage($lib,100,$IMAGE_BITMAP,0,0,"")
$hImage = _GDIPlus_BitmapCreateFromHBITMAP ($bmp)
А чтобы отобразилась картинка вместо GUICtrlCreatePic использовать _GDIPlus_GraphicsDrawImage.
Ну и добавлять картинку в exe в bmp формате.
FlatX007
26-04-2010, 11:42
tweakos »
Спасибо конечно ... но мне надо добавить jpg изображения, а в последствии png(что бы поддерживало прозрачность)
FlatX007, посмотри внимательно на следующий код:
#Region
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Run_Au3check=n
#AutoIt3Wrapper_Run_After=ResHacker\ResHacker.exe -add %out%, %out%, Arrow.jpg, rcdata, "Arrow", 0
#EndRegion
#Include <GDIPlus.au3>
#Include <Resources.au3>
_GDIPlus_Startup()
$hImage = _ResourceGetAsImage("Arrow")
$hBitmap1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageRotateFlip($hImage, 1)
$hBitmap2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$Form1 = GUICreate("", 236, 133)
$Pic1 = GUICtrlCreatePic("", 16, 16, 100, 100)
GUICtrlSendMsg(-1, 0x0172, 0, $hBitmap1)
$Pic2 = GUICtrlCreatePic("", 120, 16, 100, 100)
GUICtrlSendMsg(-1, 0x0172, 0, $hBitmap2)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
_GDIPlus_Shutdown()
Exit
EndSwitch
WEnd
; #FUNCTION# ==================================================================================================== ================
; Name...........: _GDIPlus_ImageRotateFlip
; Description ...: Rotates and flips an image
; Syntax.........: _GDIPlus_ImageRotateFlip($hImage, $iRotateFlipType)
; Parameters ....: $hImage - Pointer to an Image object
; $iRotateFlipType - Type of rotation and flip:
; |0 - No rotation and no flipping (A 180-degree rotation, a horizontal flip and then a vertical flip)
; |1 - A 90-degree rotation without flipping (A 270-degree rotation, a horizontal flip and then a vertical flip)
; |2 - A 180-degree rotation without flipping (No rotation, a horizontal flip folow by a vertical flip)
; |3 - A 270-degree rotation without flipping (A 90-degree rotation, a horizontal flip and then a vertical flip)
; |4 - No rotation and a horizontal flip (A 180-degree rotation followed by a vertical flip)
; |5 - A 90-degree rotation followed by a horizontal flip (A 270-degree rotation followed by a vertical flip)
; |6 - A 180-degree rotation followed by a horizontal flip (No rotation and a vertical flip)
; |7 - A 270-degree rotation followed by a horizontal flip (A 90-degree rotation followed by a vertical flip)
; Return values .: Success - True
; Failure - False and either:
; |@error and @extended are set if DllCall failed
; Remarks .......: None
; Related .......: None
; Link ..........; @@MsdnLink@@ GdipImageRotateFlip
; Example .......; No
; ==================================================================================================== ===========================
Func _GDIPlus_ImageRotateFlip($hImage, $iRotateFlipType)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipImageRotateFlip", "hwnd", $hImage, "int", $iRotateFlipType)
If @error Then Return SetError(@error, @extended, False)
Return $aResult[0] = 0
EndFunc ;==>_GDIPlus_ImageRotateFlip
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC