Что нового

Куда спрятать картинки?

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Привет всем, пишу нового бота. В основном он основывается на PixelSearchEx и ImageSearch. Все пиксели и координаты лежат в INI-файле. А вот маленьких картинок для поиска очень много, и встает вопрос куда их "засунуть"? чтобы Все выглядело красивенько :smile:
Ах да, забыл напомнить, это еще нужно для удобной замены картинок, в случае обновлений в игре. Например, в INI файле изменить координаты и цвета пикселей очень быстро. Хотелось как-нибудь также расположить картинки.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
А что мешает сохранить в ini, в качестве параметра путь к файлу? А файлы хранить в одной папке.
Ну или как вариант хранить все в SQLite-базе ;) , правда я еще не пробовал пихать туда картинки, но такие базы есть и думаю ничего сложного нет.
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Вот с SQL мне вариант нравится, правда в AutoIt я с ней не разу не работал... И без понятия как это реализовать
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Ага вот нашел - переделал чуть-чуть и добавил комментарии
Код:
#include <SQLite.au3>
_SQLite_Startup() ; старт библиотеки SQLite
_SQLite_Open(@ScriptDir & '\base.db') ; имя файла базы

Global $hQuery, $hRow

$sName = 'example.jpg' ; имя рисунка
$sPathFile = @ScriptDir & '\example.jpg' ; путь где лежит рисунок
$hFile = FileOpen($sPathFile, 16) ; открываем файл для чтения в бинарном виде
$sFile = FileRead($hFile) ; считываем данные
$sFile = _SQLite_Encode($sFile) ; кодирование данных для корректной вставки в базу
FileClose($hFile) ; закрываем файл

_SQLite_Exec(-1, 'CREATE TABLE IF NOT EXISTS images (name TEXT, image BLOB);') ; создание таблицы images - всего два столбца - name для названия картинки (тип текст) и image для файла (тип BLOB)
_SQLite_Exec(-1, 'INSERT INTO images VALUES ("' & $sName & '",' & $sFile & ');') ; вставка данных в таблицу

_SQLite_Query(-1,'SELECT image FROM images WHERE name="' & $sName & '";', $hQuery) ; получаем картинку из таблицы по значению поля name (name=examlpe.jpg)
_SQLite_FetchData($hQuery, $hRow, 1) ; выборка из запроса
_SQLite_QueryFinalize($hQuery) ; закрытие запроса

$sFileName = FileOpen(@ScriptDir & '\1.jpg', 2) ; открываем файл для записа
FileWrite($sFileName, $hRow[0]) ; пишем файл

_SQLite_Close() ; закрываем базу
_SQLite_Shutdown() ; закрываем библиотеку
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Вроде все понятно, но почему-то при запуске скрипта создается изображение 1.jpg, которое невозможно открыть.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Bloodrinker [?]
Вроде все понятно, но почему-то при запуске скрипта создается изображение 1.jpg, которое невозможно открыть.
У меня всё открывается нормально. Создается абсолютно идентичный файл.
Исходный файл существует? Версия AutoIt правда 3.3.6.1?
Можно попробовать удалить base.db и повторить операцию
 

axlwor

Скриптер
Сообщения
657
Репутация
147
Код:
FileWrite($sFileName, BinaryToString ($hRow[0])) ; пишем файл
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Redline, кинь мне совою библиотеку, может из-за нее проблемы.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Не легче запихать все картинки в dll а в скрипте назначать функцией GUICtrlSetImage()
 
Автор
B

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Я давно помню пытался, но что-то у меня не вышло,
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Вот пример:

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$hForm = GUICreate("SetImage", 300, 225)
$hImage = GUICtrlCreateIcon("", -1, 0, 0, 300, 225)
GUISetState()

GUICtrlSetImage($hImage, @ScriptDir & "\Image.dll", "Angel")

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Прикрепляю dll с картинкой и скриптом на всякий случай
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Bloodrinker [?]
кинь мне совою библиотеку
Ты пример не исправлял? Там каждая кавычка имеет значение!
Особенно здесь:
Код:
_SQLite_Exec(-1, 'INSERT INTO images VALUES ("' & $sName & '",' & $sFile & ');')
_SQLite_Query(-1,'SELECT image FROM images WHERE name="' & $sName & '";', $hQuery)


SQLite
 

Pelerin

Осваивающий
Сообщения
81
Репутация
23
Народ, а что если попробовать считывать картинки через FileRead побайтно и все эти байты писать в тот-же ini в виде
Код:
[Images]
im1='0x3240...'
im2='0x3240...'
...
Как такая идея? Написать для этого "wizard":
1. Указать исходный файл картинки
2. Считать
3. Записать ini
 
Верх