Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Рисуем с помощью пилота
FREEON
сообщение 26.6.2019, 14:34
Сообщение #1


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Можно ли с помощью пилота создать bmp картинку и на ней же к примеру расчертить сетку с определенным шагом по оси X и шагом по оси Y. Задав нужный цвет. Видел что что-то подобное реализовано в закрашивании фона... Если к примеру нельзя создать картинку, то хотя можно ли выполнить поставленную задачу(расчертить сетку) на готовой пустой картинке?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.6.2019, 14:49
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Сделать можно, но будет долго рисовать.
Для этого есть фотошоп. Создаётся узор и накладывается на картинку.
На крайний случай открыть картинку в paint'е и скриптом нарисовать сетку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 26.6.2019, 15:39
Сообщение #3


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(FREEON @ 26.6.2019, 14:34) *

Можно ли с помощью пилота расчертить сетку


Если сетка в paint'е устроит
код

Код
set workwindow 10489422
set linedelay 1
//
set #sx 1780        // размер листа Х
set #sy 760         // размер листа У
set #xh 24          // Шаг по Х
set #yh 10          // Шаг по У
init_arr %a (1) 5 5 // координаты первого пикселя
//
  set #x %a [1 1]
  set #y %a [1 1]
repeat (#sx / #xh)
    set #x (#x + #xh)
    kleft_down #x %a[1 1]
    wait 10
    move #x #sy
    wait 10
    kleft_up #x #sy
end_repeat
repeat (#sy / #yh)
    set #y (#y + #yh)
    kleft_down %a[1 1] #y
    wait 10
    move #sx #y
    wait 10
    kleft_up #sx #y
end_repeat
end_script



--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.6.2019, 23:45
Сообщение #4


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Цитата(cirus @ 26.6.2019, 14:49) *

Сделать можно, но будет долго рисовать.




Но это же на пилотовском языке ? А луа ? Думаю не хуже будет, там же поиск работает быстрее чем встроенная функция.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.6.2019, 3:00
Сообщение #5


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
можно ли выполнить поставленную задачу(расчертить сетку) на готовой пустой картинке?

Код
--lua
local ffi=require "ffi"
local cc=ffi.cast

local path_in=[[C:\1.bmp]]  -- путь к картинке
local path_out=[[C:\2.bmp]] -- путь куда сохранить картинку с сеткой
local setkaX, setkaY = 5, 5  -- размеры сетки
local setkaR, setkaG, setkaB = 255, 0, 255  -- цвет сетки в ргб

local address, width, height, length = loadimage(path_in)   -- загрузить картинку
if address > 0 then  -- если загружена
    for y=0, height-1  do
        for x=0, length-3, 3 do
            if  x % setkaX == 0 or y % setkaY == 0 then
                cc("unsigned char*", address + x + y * length)[0]=setkaB
                cc("unsigned char*", address + x + y * length+1)[0]=setkaG
                cc("unsigned char*", address + x + y * length+2)[0]=setkaR
            end
        end
    end
saveimage(address, path_out)    -- сохранить картинку
else log("Картинка не найдена")
end
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.6.2019, 19:04
Сообщение #6


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 27.6.2019, 3:00) *

Код
--lua
local ffi=require "ffi"
local cc=ffi.cast

local path_in=[[C:\1.bmp]]  -- путь к картинке
local path_out=[[C:\2.bmp]] -- путь куда сохранить картинку с сеткой
local setkaX, setkaY = 5, 5  -- размеры сетки
local setkaR, setkaG, setkaB = 255, 0, 255  -- цвет сетки в ргб

local address, width, height, length = loadimage(path_in)   -- загрузить картинку
if address > 0 then  -- если загружена
    for y=0, height-1  do
        for x=0, length-3, 3 do
            if  x % setkaX == 0 or y % setkaY == 0 then
                cc("unsigned char*", address + x + y * length)[0]=setkaB
                cc("unsigned char*", address + x + y * length+1)[0]=setkaG
                cc("unsigned char*", address + x + y * length+2)[0]=setkaR
            end
        end
    end
saveimage(address, path_out)    -- сохранить картинку
else log("Картинка не найдена")
end


Да благодарю отфотошопил. Похоже для луа нужен какой-то плагин(файл)?
Цитата

module 'ffi' not found:
no field package.preload['ffi']
no file '.\ffi.lua'
no file 'D:\UOPilot\lua\ffi.lua'
no file 'D:\UOPilot\lua\ffi\init.lua'
no file 'D:\UOPilot\ffi.lua'
no file 'D:\UOPilot\ff

Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.6.2019, 21:52
Сообщение #7


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Похоже для луа нужен какой-то плагин(файл)?

Пилот нужен 2.41.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 27.6.2019, 22:59
Сообщение #8


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 27.6.2019, 21:52) *

Пилот нужен 2.41.

Да как бы: UoPilot Version 2.41 (31.12.2018) и lua5.1.dll имеется
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 28.6.2019, 12:57
Сообщение #9


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Версии 2.41 оказалось мало. Немного покопавшись выяснилось что дело было в lua.dll а именно ffi которой просто нет, зато она есть в luajit.
Заменил стандартную пилотовскую библиотеку на версию из LuaJIT и все заработало (разница в 300KB).
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.6.2019, 13:10
Сообщение #10


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Версии 2.41 оказалось мало.

Стандартной длл хватает. Она распаковывается при первом запуска пилота. Если конечно не было другой длл.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 28.6.2019, 13:16
Сообщение #11


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 28.6.2019, 13:10) *

Стандартной длл хватает. Она распаковывается при первом запуска пилота. Если конечно не было другой длл.

Возможно библиотеки не заменились или я сам когда копировал в старую папку новую версию пилота не заменил.
Все ровно чертить пилотом в разы быстрее чем фотошопить(пока загрузишь ph пока создашь узор, области выделишь и заполнишь) а пилотом бжык и все готово.
Сразу возникает вопрос как еще задать толщину линий сетки. Если 0, 0 это начало отсчета, то для сетки толщиной в 2px нужно 2 центра 0,1 и 1,0. Пытался ещё for приделать для прорисовки 2го слоя линий и прям картины рисуются но не сетка с нужной толщиной. Если одну из осей ещё получается подогнать вплотную к первой то со второй абы шо выходит
Прикрепленное изображение
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.6.2019, 14:55
Сообщение #12


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
как еще задать толщину линий сетки

код
Код
--lua
local ffi=require "ffi"
local cc=ffi.cast

local path_in=[[C:\1.bmp]]  -- путь к картинке
local path_out=[[C:\2.bmp]] -- путь куда сохранить картинку с сеткой
local setkaX, setkaY = 10, 10  -- размеры сетки
local setkaR, setkaG, setkaB = 255, 0, 255  -- цвет сетки в ргб

local setka_width_X, setka_width_Y = 3, 3   -- толщина линий сетки


local address, width, height, length = loadimage(path_in)   -- загрузить картинку
if address > 0 then  -- если загружена
    for y=0, height-1  do
        for x=0, length-3, 3 do
            if  x % setkaX == 0 then
                for i=0, setka_width_X-1 do
                    cc("unsigned char*", address + x + y * length + i * 3)[0]=setkaB
                    cc("unsigned char*", address + x + y * length + i * 3 + 1)[0]=setkaG
                    cc("unsigned char*", address + x + y * length + i * 3 + 2)[0]=setkaR
                end
            end

            if  y % setkaY == 0 then
                for i=0, setka_width_Y-1 do
                    cc("unsigned char*", address + x + (y + i) * length)[0]=setkaB
                    cc("unsigned char*", address + x + (y + i) * length+1)[0]=setkaG
                    cc("unsigned char*", address + x + (y + i)  * length+2)[0]=setkaR
                end
            end
        end
    end
saveimage(address, path_out)    -- сохранить картинку
else log("Картинка не найдена")
end
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
minfin
сообщение 8.9.2019, 18:05
Сообщение #13


*

Registred
Сообщений: 9
Регистрация: 26.1.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.206
Возраст: 29



можно рассмотреть формат .SVG (векторная графика)

// пишу сложный парсер для сложной инфографики
и в моём случае очень разгрузило и по скриптам, и по нагрузке, и вообще по функционалу


есть редакторы, и даже есть браузерный редактор. бесплатный.

картинки рисуются кодом.
особенно легко обновлять\редактировать\переносить текст в конкретные координаты.

работает в разы легче чем PSD, \\ где придется писать ручную правку слоёв через тонны Move\kleft
при этом так же имеет функции Слоёв (Layers)
которые можно править по переменной, не запуская сам редактор. (через write пилота)

\\ через костыли:
координатам\слоям\объектам\тексту можно задавать переменные, объединять в группы,
а через булиан в пилоте можно задать условия if на Цвет например... или
если есть окружности\маркеры\линии, то можно менять их размерность\толщину\длину. в зависимости от if

так,
если какая-то $переменная, например, в критической отметке,
то можно изменить цвет на красный, увеличить размер шрифта, сделать жирным ...
и уже от соотношения, можно влиять на политику расположения координат индекса (родительского слоя)
проще говоря:
одной правкой в фоновом режиме,
можно переместить огромный графический массив, в соответствии с логикой высчитанной в UO
что идеально.
и моментально.



формат SVG в браузере отображает как картинку, но текст выделяется\ищется\редактируется, а ссылки кликабельны.
чего нет в Пейнте и сложно реализуемо в фотошопе.

ну и соответственно,
если в пейнте начать рисовать, то изменить уже невозможно.
в SVG же достаточно одной правкой, в определённой строке, определённого параметра,
отвечающего за координат Х\Y\угол\радиус\синус\косинус\экспоненту
обновлять хоть в режиме реального времени.


SVG внутри похож на HTML\XML\CSS. так что лично я (нуб) разобрался дня за 3.
теперь вспоминаю язык Пилота =) годов из 2005


____________
не знаю для чего автору рисовать сетку в пейнте................
в SVG она делается буквально тремя строками кода, прямо из Пилота.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
minfin
сообщение 8.9.2019, 19:10
Сообщение #14


*

Registred
Сообщений: 9
Регистрация: 26.1.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.206
Возраст: 29



Код

<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
    <style type="text/css">
        line { stroke: #ccc; }
    </style>
<defs>
<pattern id="diagonalHatch" width="10" height="10" patternTransform="rotate(45)" patternUnits="userSpaceOnUse">
  <line x1="0" y1="0" x2="0" y2="10" />
</pattern>
</defs>
    <rect width="100%" height="100%" fill="url(#diagonalHatch)" />
<g class="layer">
  <title>TEST</title>
  <text fill="#000000" font-family="serif" font-size="24" id="svg_1" stroke="#000000" stroke-width="0" text-anchor="middle" x="265.5" xml:space="preserve" y="77.40625">TEST[</text>
</g>

</svg>


вот вроде...
проверить времени нет. Мультизагружен =)
но так чтоб понимать примерно по коду.

id="svg_1" - и есть переменная текстового слоя TEST.
костыль именно к ней. из этой строки (через regexp) уже редактируется весь слой. как хочешь.
тот же метод к Линиям\окружностям\и тп.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 13:58
Designed by Nickostyle