Что нового

Считать в GUI бинарный код картинки из ini файла

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Версия Autoit:3.

Описание:Есть идея,может я ни первый,но всё же,я пробывал но у меня не получается,например считатьбинарный код картинки и записать в ini файл,например:

[main_pic]
background=0x60243800060367047............и так далее,

после чего запустить скрипт и чтобы скрипт не искал картинку рятом с ним,а просто считал из ini файла и вывел в форму ни бинарный код а именно картинку,пускай даже для начала он считает бинарный код и запишет в файл image.bmp в директорию temp,а далее выведит в форму,вот такая вот мысля,может она и невоплотима в autoit'e ,но как бы было хорошо чтоб в директории со скриптом не было никаких картинок а был лишь один единственный файл,например resourse.ini ....
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 591
Репутация
938
Изображения можно встроить напрямую в код программы.
 
Автор
S

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
от тоже хорошо,а как,с помощью FileInstall?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 591
Репутация
938
Sergey2210 сказал(а):
от тоже хорошо,а как,с помощью FileInstall?
У меня не осталась ссылки на эту тему и в поиске ее найти я не смог, но вот au3 файл что был там прикреплен
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Sergey2210
Код:
$iLen = 64

$sFile = FileOpenDialog('Выберите файл', @ScriptDir & '\', 'Рисунок (*.jpg;*.jpeg;*.gif;*.png;*.bmp)', 1)
If Not $sFile Then Exit
$hFile = FileOpen($sFile, 16)
$sText = FileRead($hFile)
FileClose($hFile)
$sText = Hex($sText)
$iBytes = StringLen($sText)
$iInt = Int($iBytes / $iLen)
$iEnd = Mod($iBytes, $iLen)
$sFuncName = '_' & StringUpper(StringRegExpReplace($sFile, '^.*\.', '')) & '_' & _
		StringRegExpReplace(StringReplace($sFile, '-', '_'), '.*\\|\.[^.]*$', '')
$bResult = "Func " & $sFuncName & "()" & @LF
$bResult &= @TAB & "Local $bImage = '0x'" & @LF
For $i = 1 To $iInt
	$bResult &= @TAB & "$bImage &= '" & StringLeft($sText, $iLen) & "'" & @LF
	$sText = StringTrimLeft($sText, $iLen)
Next
$bResult &= @TAB & "$bImage &= '" & StringLeft($sText, $iEnd) & "'" & @LF
$bResult &= @TAB & "Return Binary($bImage)" & @LF & "EndFunc   ;==>" & $sFuncName
$sFileNew = @ScriptDir & '\' & StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '') & '.au3'
$hFileNew = FileOpen($sFileNew, 2)
FileWrite($hFileNew, $bResult)
FileClose($hFileNew)
 
Автор
S

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
всем огромнейшее спасибо,пробляма решена! :IL_AutoIt_1:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
AZJIO [?]
Проверил сохранение в ini - не работает видимо autoit не может за раз получить в переменную строку с большим количеством символов.
Проверил на XP SP3 32. Максимальный размер (длина) строки ключа - чуть больше 1 Мб (1048576 + ~1024 символов). Если больше, то при записи получается пустой файл. Можно попробовать "обмануть" и разделить один ключ на несколько, типа:
Код:
$sFile = @ScriptDir & '\test.ini'
$sSection = 'Test'
$sKey = 'Key'
$iMB = 2
$iCount = (1024 * 512)
$iNumbers = $iMB * ($iCount * 2) + 100

$sText = ''
For $i = 1 To $iNumbers
	$sText &= 0
Next
$sText &= 1

$iInt = Int(StringLen($sText) / $iCount)
$iMod = Mod(StringLen($sText), $iCount)
If $iInt Then
	For $i = 1 To $iInt
		IniWrite($sFile, $sSection, $sKey & '_' & $i, StringLeft($sText, $iCount))
		$sText = StringTrimLeft($sText, $iCount)
	Next
Else
	IniWrite($sFile, $sSection, $sKey, StringLeft($sText, $iCount))
EndIf
If $iMod Then
	IniWrite($sFile, $sSection, $sKey & '_' & $i, StringLeft($sText, $iCount))
EndIf
 
Верх