Можно ли с помощью пилота создать bmp картинку и на ней же к примеру расчертить сетку с определенным шагом по оси X и шагом по оси Y. Задав нужный цвет. Видел что что-то подобное реализовано в закрашивании фона... Если к примеру нельзя создать картинку, то хотя можно ли выполнить поставленную задачу(расчертить сетку) на готовой пустой картинке?
Сделать можно, но будет долго рисовать.
Для этого есть фотошоп. Создаётся узор и накладывается на картинку.
На крайний случай открыть картинку в 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
--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
--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
Версии 2.41 оказалось мало. Немного покопавшись выяснилось что дело было в lua.dll а именно ffi которой просто нет, зато она есть в luajit.
Заменил стандартную пилотовскую библиотеку на версию из https://forum.uokit.com/index.php?s=&showtopic=19856&view=findpost&p=431534 и все заработало (разница в 300KB).
--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
можно рассмотреть формат .SVG (векторная графика)
// пишу сложный парсер для сложной инфографики
и в моём случае очень разгрузило и по скриптам, и по нагрузке, и вообще по функционалу
есть редакторы, и даже есть браузерный редактор. бесплатный.
картинки рисуются кодом.
особенно легко обновлять\редактировать\переносить текст в конкретные координаты.
работает в разы легче чем PSD, \\ где придется писать ручную правку слоёв через тонны Move\kleft
при этом так же имеет функции Слоёв (Layers)
которые можно править по переменной, не запуская сам редактор. (через write пилота)
\\ через костыли:
координатам\слоям\объектам\тексту можно задавать переменные, объединять в группы,
а через булиан в пилоте можно задать условия if на Цвет например... или
если есть окружности\маркеры\линии, то можно менять их размерность\толщину\длину. в зависимости от if
так,
если какая-то $переменная, например, в критической отметке,
то можно изменить цвет на красный, увеличить размер шрифта, сделать жирным ...
и уже от соотношения, можно влиять на политику расположения координат индекса (родительского слоя)
проще говоря:
одной правкой в фоновом режиме,
можно переместить огромный графический массив, в соответствии с логикой высчитанной в UO
что идеально.
и моментально.
формат SVG в браузере отображает как картинку, но текст выделяется\ищется\редактируется, а ссылки кликабельны.
чего нет в Пейнте и сложно реализуемо в фотошопе.
ну и соответственно,
если в пейнте начать рисовать, то изменить уже невозможно.
в SVG же достаточно одной правкой, в определённой строке, определённого параметра,
отвечающего за координат Х\Y\угол\радиус\синус\косинус\экспоненту
обновлять хоть в режиме реального времени.
SVG внутри похож на HTML\XML\CSS. так что лично я (нуб) разобрался дня за 3.
теперь вспоминаю язык Пилота =) годов из 2005
____________
не знаю для чего автору рисовать сетку в пейнте................
в SVG она делается буквально тремя строками кода, прямо из Пилота.
<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>
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)