Render.ru

Можно ли изменить размер JPG, при открытии?

#1
При открытии каких либо файлов, напимер JPG, размер которых к примеру 700*650 пикселей, происходит небольшое несоответствие в скрипте:

plugin textureMap drawMap
name:"DrawMap"
classid:#(0xb01b213a,0xdbe89dc8)
extends:bitmaptexture
replaceui:true
(
local pointarray = #(),tmap,t_draw
fn getuvinfo obj sray =
(
local intray,tvface,tvarray,tv
if obj == undefined do return()
intray = intersectrayex obj sray
if intray == undefined do return()
try
(
tvface = gettvface obj intray[2]
)
catch (
print "No tv faces"
return()
)
tvarray = #(gettvert obj tvface.x,
gettvert obj tvface.y,gettvert obj tvface.z)
tv = (tvarray[1]*intray[3].x)+(tvarray[2] * intray[3].y)+(tvarray[3] * intray[3].z)
)
fn drawhelper obj sray =
(
local intray
if obj == undefined do return()
intray = intersectray obj sray
if intray == undefined do return()
append pointArray (point pos:intRay.pos showaxis:false)
)

parameters main rollout:params
(
clp_color type:#color ui:clp_color
cbt_draw type:#boolean ui:cbt_draw


on cbt_draw set state do
(
if $ == undefined do (
cbt_draw = false;return()
)
if not (iskindof $ editadlemesh) do addmodifier $ (normalmodifier())
while state == true do (
starttool t_draw
)
if state == false do stoptool t_draw
)
)--end rol params

rollout params "DrawMap Parameters" width:310 height:303
(
button btn "Open" pos:[135,3] width:53 height:21
colorPicker clp_color "SetColor" pos:[14,36] width:84 height:20 color:(color 255 255 0)
checkbutton cbt_draw "Draw" pos:[131,62] width:60 height:21 highlightColor:(color 180 255 180)
bitmap bmp1 "Bitmap" pos:[31,90] width:256 height:208 fileName:"d:\!distr\qwe.bmp"
button btn29 "ABOUT" pos:[215,31] width:72 height:24
on btn pressed do
(f = getOpenFileName \
types:"Jpg(*.Jpg)|*.Jpg|All|*.*|"
tmap = (openbitmap (getFilenamePath f+filenameFromPath f));close tmap
delegate.filename = (getFilenamePath f+filenameFromPath f)
)
on btn29 pressed do
(
messagebox"This Script "
)
)fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos #(c)
)

tool t_draw
(
local uvdata

on mousepoint click do
(
if click == 1 then (
uvdata = getuvinfo $ (mapscreentoworldray viewpoint)
if uvdata == undefined do return()
drawbitmap delegate.bitmap uvdata
drawhelper $ (mapscreentoworldray viewpoint)
)
else
(
delete pointarray; pointarray = #()
delegate.apply = true
#stop
)
)

on mouseabort click do cbt_draw = false
)

on create do
(f = getOpenFileName \
types:"Jpg(*.Jpg)|*.Jpg|All|*.*|"

save (bitmap 256 256 filename:("c:\\drawmap.bmp"))
tmap = (openbitmap (getFilenamePath f+filenameFromPath f));close tmap
delegate.filename = (getFilenamePath f+filenameFromPath f))
)

Он продолжает работать : наносить пиксели на объект во вьюпортах, но когда размер карты большой более 700 пикселе в длину и ширину, то чтоб он нанёс пиксель надо тыкнуть много раз мышкой,а это очень не удобно, когда битмап 250*250 пикселей то нанести очень легко и удобно.Так вот можно ли при открытии JPG изменить её размер, до 250 пикселей хотябы или нет, если можно,то каким образом.ЗАранее благодарен.А!!!Заодно ещё раз спасибо DENIS' у!!!!!
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#2
если не ошибаюсь напрямую невозможно растянуть картинку
надо либо написать свою фукцию либо глянуть раширения
возможно есть где
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#3
посмотри MakeIcon_4_55.ms в стандарных скриптах
вороде там чтото на эту тему есть
 
#4
Спасибо за совет! Я посмотрел этот скрипт, он ооочень большой, я с ним не разбирался, т.е. как он работает а просмотрел только текст. В неоторых месте нашёл что-то похожее на размеры загружаемых файлов.

global out_file16 = bitmap 16 15-- это пременная битмэп с размером 16*15 пикслей, это не то, кажется?

Вот смотри:

input_file16 = openbitmap (pathname.text+"\\"+lib_list[lls]+"_16i.bmp") --это открывается битмап просто?

Наиболее похожим является эта часть

for i = 0 to 14 do
(
pixel_line = getpixels input_file16 [(icon_number.value-1)*16,i] 16
setpixels out_file16 [0,i] pixel_line
) Тут они что-то получают размер чтоль, а потом изменяют его???

А может сделать пустой растр размером 300*300 пикселей, а потом поместить
в него изображение загружаемого, хотя не получится, нельзя же копировать содержимое растра...
 
#6
Я тут попарился долго... вот что получилось:

rollout unnamedRollout "rol" width:295 height:229
(
button btn1 "button" pos:[8,75] width:120 height:32
editText edt6 "" pos:[11,6] width:126 height:19
on btn1 pressed do
(
b = bitmap 300 300
f = getOpenFileName \
types:"bmp(*.bmp)|*.bmp|"
if f != undefined then
( open = openbitmap(getFilenamePath f+filenameFromPath f)
copy open b
edt6.text = b.height as string +"*"+ b.width as string
close b
)
))
createDialog unnamedRollout width:162 height:130
таким образом создаём битмап B , который имеет размеры 300*300 пикселей.
потом открываем OPEN из диалога открытия, теперь open имеет к-л размеры.
И копируем этот OPEN в В, при этом если размеры не совпадают, то OPEN будет масштабироваться до размеров В, это вродь то что надо, только у меня не получается сохранить БИТМАП В. пОМОГИТЕ, пожалуйста. в нужный файл , он ругается ...
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#7
rollout unnamedRollout "rol" width:295 height:229
(
button btn1 "button" pos:[8,75] width:120 height:32
editText edt6 "" pos:[11,6] width:126 height:19
on btn1 pressed do
(

f = getOpenFileName \
types:"bmp(*.bmp)|*.bmp|"
if f != undefined then
( open = openbitmap f
b = bitmap 300 300 filename:f
copy open b
close open
edt6.text = b.height as string +"*"+ b.width as string
save b
close b
)
))
 
#8
СПАСИБО ЗА ПОМОЩЬ, не хочу быть надоедливым, но сам я не могу понять .Надеюсь на Вашу помощь.
В средстве работы с мышью есть событие ON MOUSEMOVE , ОНО ВЫЗЫВАЕТСЯ ПРИ КАЖДОМ ДВИЖЕНИИ МЫШИ. Это я всё по тому же скрипту, который Вы помогли сделать:
plugin textureMap drawMap
name:"DrawMap"
classid:#(0xb01b213a,0xdbe89dc8)
extends:bitmaptexture
replaceui:true
(
local pointarray = #(),tmap,t_draw
--local color = #(color 255 255 0)

fn getuvinfo obj sray =
(
local intray,tvface,tvarray,tv
if obj == undefined do return()
intray = intersectrayex obj sray
if intray == undefined do return()
try
(
tvface = gettvface obj intray[2]
)
catch (
print "No tv faces"
return()
)
tvarray = #(gettvert obj tvface.x,
gettvert obj tvface.y,gettvert obj tvface.z)
tv = (tvarray[1]*intray[3].x)+(tvarray[2] * intray[3].y)+(tvarray[3] * intray[3].z)
)
/*
fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos c -- #(color 255 255 0)
)
*/
fn drawhelper obj sray =
(
local intray
if obj == undefined do return()
intray = intersectray obj sray
if intray == undefined do return()
append pointArray (point pos:intRay.pos showaxis:false)
)

parameters main rollout:params
(
clp_color type:#color ui:clp_color
cbt_draw type:#boolean ui:cbt_draw

on cbt_draw set state do
(
if $ == undefined do (
cbt_draw = false;return()
)
if not (iskindof $ editadlemesh) do addmodifier $ (normalmodifier())
while state == true do (
starttool t_draw
)
if state == false do stoptool t_draw
)
)

rollout params "DrawMap Parameters"
(
colorpicker clp_color "SetColor" color:(color 255 255 0)
checkbutton cbt_draw "Draw" highlightcolor:(color 180 255 180)

)
fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos #(c) -- #(color 255 255 0)
)

tool t_draw
(
local uvdata

on mousepoint click do
(
if click == 1 then (
uvdata = getuvinfo $ (mapscreentoworldray viewpoint)
if uvdata == undefined do return()
drawbitmap delegate.bitmap uvdata
drawhelper $ (mapscreentoworldray viewpoint)
)
else
(
delete pointarray; pointarray = #()
delegate.apply = true
#stop
)
)

on mouseabort click do cbt_draw = false
)

on create do
(
save (bitmap 256 256 filename:("c:\\drawmap.bmp"))
tmap = (openbitmap ("c:\\drawmap.bmp"));close tmap
delegate.filename = ("c:\\drawmap.bmp")
)
)
Тут в одном фрагменте рассматривается действия при щелчке мыши.
on mousepoint click do
(
if click == 1 then (
uvdata = getuvinfo $ (mapscreentoworldray viewpoint)
if uvdata == undefined do return()
drawbitmap delegate.bitmap uvdata
drawhelper $ (mapscreentoworldray viewpoint)
)
else
(
delete pointarray; pointarray = #()
delegate.apply = true
#stop
)
)
--На этом месте должно быть следущее,
--ON MOUSEMOVE do cbt_draw = true, дак вот, он не запускается, по идее должно
--происходить следущее, нажимаем кнопку, происходят вышеуказанные действия и если
--она не отжата и происходит движение, то выполняется ON mouseMove, где
--повторяется нанесение штрихов(пикселей) таким образом получаются линии до
--отжатия кнопки мыши. Но этого нету.Может вы знаете как этот ON MouseMove
--работает???Помогите, пожалуйста.
on mouseabort click do cbt_draw = false
)
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#9
plugin textureMap drawMap
name:"DrawMap"
classid:#(0xb01b213a,0xdbe89dc8)
extends:bitmaptexture
replaceui:true
(
local pointarray = #(),tmap,t_draw
--local color = #(color 255 255 0)

fn getuvinfo obj sray =
(
local intray,tvface,tvarray,tv
if obj == undefined do return()
intray = intersectrayex obj sray
if intray == undefined do return()
try
(
tvface = gettvface obj intray[2]
)
catch (
print "No tv faces"
return()
)
tvarray = #(gettvert obj tvface.x,
gettvert obj tvface.y,gettvert obj tvface.z)
tv = (tvarray[1]*intray[3].x)+(tvarray[2] * intray[3].y)+(tvarray[3] * intray[3].z)
)
/*
fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos c -- #(color 255 255 0)
)
*/
fn drawhelper obj sray =
(
local intray
if obj == undefined do return()
intray = intersectray obj sray
if intray == undefined do return()
append pointArray (point pos:intRay.pos showaxis:false)
)

parameters main rollout:params
(
clp_color type:#color ui:clp_color
cbt_draw type:#boolean ui:cbt_draw

on cbt_draw set state do
(
if $ == undefined do (
cbt_draw = false;return()
)
if not (iskindof $ editadlemesh) do addmodifier $ (normalmodifier())
while state == true do (
starttool t_draw
)
if state == false do stoptool t_draw
)
)

rollout params "DrawMap Parameters"
(
colorpicker clp_color "SetColor" color:(color 255 255 0)
checkbutton cbt_draw "Draw" highlightcolor:(color 180 255 180)

)
fn drawbitmap bmap uvdata =
(
local ppos
ppos = [(uvdata.x * bmap.width) as integer, (bmap.height - (uvdata.y * bmap.height)) as integer]
c = params.clp_color.color
setpixels bmap ppos #(c) -- #(color 255 255 0)
)

tool t_draw
(
local uvdata

on mousepoint click do
(
if click == 1 then (
uvdata = getuvinfo $ (mapscreentoworldray viewpoint)
if uvdata == undefined do return()
drawbitmap delegate.bitmap uvdata
drawhelper $ (mapscreentoworldray viewpoint)
)
else
(
delete pointarray; pointarray = #()
delegate.apply = true
#stop
)
)
on mouseMove clickno do
(
uvdata = getuvinfo $ (mapscreentoworldray viewpoint)
if uvdata == undefined do return()
drawbitmap delegate.bitmap uvdata
drawhelper $ (mapscreentoworldray viewpoint)

)
on mouseabort click do cbt_draw = false
)

on create do
(
save (bitmap 256 256 filename:("c:\\drawmap.bmp"))
tmap = (openbitmap ("c:\\drawmap.bmp"));close tmap
delegate.filename = ("c:\\drawmap.bmp")
)
)
 
Сверху