Что нового

[Элементы GUI] Выбор и замена изображения с отображением в GUI

in-com

Новичок
Сообщения
28
Репутация
0
Здравствуйте. Не подскажете, можно ли средствами AutoIt реализовать в GUI показ изображения (png, jpg, ico) и его последующую замену другим выбранным по нажатию кнопки "Обзор" и сохранением (замены) в тот же файл.
Если можно пример как это делается. Много гуглил и облазил поиском 20 страниц на данном сайте так и не нашел нужного.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Правильно заданный вопрос - это уже половина ответа.

P.S

Что за народ пошел в последнее время, даже поиском не умеет пользоваться. Вы не найдете ответ на 100% соответствующий вашему вопросу, но найдете 100500 ответов, отвечающих на отдельные части вопроса. Если вы не можете объеденить все это вместе, то вам еще рано лезть в эту тему. Учите матчасть.


Добавлено:
Сообщение автоматически объединено:

in-com, уберите пожалуйста ссылку на сайт http://insurgency.uz/ в вашем профиле, в противном случае ваш аккаунт будет заблокирован в соответствии с изменениями в правилах форума.

http://autoit-script.ru/index.php?topic=20523.0
 
Автор
I

in-com

Новичок
Сообщения
28
Репутация
0
joiner сказал(а):
это что значит? что за файл?
Имеется изображение с определенным названием, которое необходимо изменить средствами AutoIt.
Для более подробного разложения сути прикрепил скриншот того, что было реализовано сторонними программами, но хотелось бы это увидеть на AutoIt.
 

Вложения

  • Screenshot.jpg
    Screenshot.jpg
    8.3 КБ · Просмотры: 11

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Можно, только не ясно чем вам помогать. Вот некоторые функции:
Код:
FileOpenDialog - открывает диалог выбора файла
GUICtrlSetImage - вставляет картинку в GUI
Сохранить - это удалить старую аватарку функцией FileDelete и записать новую под тем же именем FileWrite 
Что бы создать окно и кнопки - смотрите пример к функции GUICreate
 
Автор
I

in-com

Новичок
Сообщения
28
Репутация
0
inververs сказал(а):
Код:
GUICtrlSetImage - вставляет картинку в GUI
Делал по справке, не получилось, вместо изображения отображается кнопка.

Код:
#include <GUIConstants.au3>
GUICreate("Смена аватарки")
GUICtrlCreateButton ("Текущий аватар", 10,20,40,40, $BS_ICON)
GUICtrlSetImage (-1, "avatar.dat",-1)   
GUISetState ()
While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend

Данный файл avatar.dat это на самом деле картинка avatar.png
Также пробовал отобразить картинку через функцию GUICtrlCreatePic, но безуспешно.
Прошу перенесите тему в "Стол заказов" ибо у меня не получается самому это реализовать :(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
in-com [?]
Данный файл avatar.dat это на самом деле картинка avatar.png
Лучше в первом посте указывать что за картинка. Форматы же разные бывают, не все можно отобразить в GUI, но с png решение есть, смотрите ответ:
http://autoit-script.ru/index.php?topic=359.msg120374#msg120374


Добавлено:
Сообщение автоматически объединено:

Код будет примерно такой, не весь, только та часть, где загружается картинка png, версия Autoit должна быть хотя бы 3.3.13.21 или новее.
Код:
#include <GDIPlus.au3>
#include <WinAPI.au3>

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 231, 128, 224, 170)
$Button1 = GUICtrlCreateButton("Открыть", 128, 8, 75, 25)
GUISetState(@SW_SHOW)

Global $Pic1

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$sFileName = FileOpenDialog('Картинка в png', '', 'Png (*.png)')
			If @error Then ContinueLoop
			If $Pic1 Then GUICtrlDelete($Pic1)
			$Pic1 = _GUICtrlPic_Create($sFileName, 8, 8, 100, 100)
	EndSwitch
WEnd




; #INTERNAL_USE_ONLY#=================================================================================================
; Name...........: _GUICtrlPic_Create
; Description ...: Creates a Picture control for the GUI
; Syntax ........: _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth, $iHeight, $iStyle = -1 , $iExStyle = -1)
; Parameters ....: $sFilename - Path of image file
; Author ........: UEZ
; Modified.......: Melba23, guinness, jpm
; Remarks .......: PNG image can be used.
; ====================================================================================================================
Func _GUICtrlPic_Create($sFilename, $iLeft, $iTop, $iWidth = -1, $iHeight = -1, $iStyle = -1, $iExStyle = -1)
    _GDIPlus_Startup()
    Local $idPic = GUICtrlCreatePic("", $iLeft, $iTop, $iWidth, $iHeight, $iStyle, $iExStyle)
    Local $hBitmap = _GDIPlus_BitmapCreateFromFile($sFilename)
    If $iWidth = -1 Then $iWidth = _GDIPlus_ImageGetWidth($hBitmap)
    If $iHeight = -1 Then $iHeight = _GDIPlus_ImageGetHeight($hBitmap)
    Local $hBitmap_Resized = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Local $hBMP_Ctxt = _GDIPlus_ImageGetGraphicsContext($hBitmap_Resized)
    _GDIPlus_GraphicsSetInterpolationMode($hBMP_Ctxt, $GDIP_INTERPOLATIONMODE_HIGHQUALITYBICUBIC)
    _GDIPlus_GraphicsDrawImageRect($hBMP_Ctxt, $hBitmap, 0, 0, $iWidth, $iHeight)
    Local $hHBitmap = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap_Resized)
    Local $hPrevImage = GUICtrlSendMsg($idPic, $STM_SETIMAGE, 0, $hHBitmap) ; $STM_SETIMAGE = 0x0172
    _WinAPI_DeleteObject($hPrevImage); Delete Prev image if any
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_BitmapDispose($hBitmap_Resized)
    _GDIPlus_GraphicsDispose($hBMP_Ctxt)
    _WinAPI_DeleteObject($hHBitmap)
    _GDIPlus_Shutdown()

    Return $idPic
EndFunc   ;==>_GUICtrlPic_Create
 
Верх