PDA

Просмотр полной версии : Изменение размеров загруженого jpg-изображения


LeVitaN
08.08.2007, 17:30
Доброго времени суток товарищи.
Есть такая задача: необходимо загружать изображение и изменять его размеры спомощью мыши (т.е. нажал на маркер, перетащил и размер изменился).
Реализую следующий способом.
Загружаю картинку с помощью MovieClipLoader() в мувик, допустим img_mc. Но после загрузки изображения свойства img_mc._width и img_mc._height равны '0'. И соответсвенно менять их нет возможности. Причем в обработчике MovieClipLoader().onLoadInit эти свойства доступны.

Пытался подойти к проблеме с другой стороны: создавал в мувике img_mc динамическое текстовое поле img_txt и в теге <img> указывал какую картинку загружать. Затем менял размеры клипа img_mc, изменяя свойства _xscale и _yscale. В принципе все работает, но заметил одну неприятную вещь: если размер jpg меньше чем размер указываемый в теге <img>, то после загрузки jpg, размеры текстового поля img_txt изменяются совершенно непонятным образом. Например: размер jpg 200x118, создаю текстовое поле img_txt размером 200x200, в теге <img> указываю width='200', height='200', тестирую фильм, и размер img_txt равен 202х304, хотя сама картинка отобржается корректно(т.е. с заданными размерами).
Заметил что размер img_txt меняется после того как после загрузки изображения в img_txt появляется еще один MovieClip с именем "clipper-o-Depth0".

Чес слово замаялся уже, не знаю че делать. Есть какие-нибудь мысли по этому поводу?

Спасибо за внимание.

silin
08.08.2007, 21:31
Но после загрузки изображения свойства img_mc._width и img_mc._height равны '0'. И соответсвенно менять их нет возможности. Причем в обработчике MovieClipLoader().onLoadInit эти свойства доступны.
путаница: это до завершения загрузки они равны 0, но смотреть/управлять ими нужно после события onLoadInit, что ты сам и подметил..
менять их нет возможности потому как мувик еще не загружен, а когда загрузиться подменит все, что ты определил на свое..
т.е. и методы управления надо определять в onLoadInit

пример (таскаем картинку за правый/нижний угол)
import flash.geom.Point;
var initW:Number=200,initH:Number=300;
var img_mc:MovieClip=this.createEmptyMovieClip("img_mc",this.getNextHighestDepth());
var loader:MovieClipLoader=new MovieClipLoader();
loader.addListener(this);
function startResize(){
var b=this.getBounds(_root);
if(_root._xmouse>b.xMax-20 && _root._ymouse>b.yMax-20){//только RB угол 20х20
this.mouseP=new Point(_xmouse,_ymouse);
this.onMouseMove=mouseResize;
}
}
function stopResize(){
this.onMouseMove=null;
}
function mouseResize(){
var p=new Point(_xmouse,_ymouse);
this._width+=p.x-this.mouseP.x;
this._height+=p.y-this.mouseP.y;
this.mouseP=p;
}

function onLoadInit(mc:MovieClip){
mc._width=initW;
mc._height=initH;
mc.onPress=startResize;
mc.onRelease=mc.onReleaseOutside=stopResize;
}
loader.loadClip("face.jpg",img_mc);

Dr.OH
08.08.2007, 22:36
а еще есть _xscale, _yscale, которые работают всегда ;)

silin
08.08.2007, 22:44
дада, и еще _x, _y..
я не знаю почему они не переопределяются при загрузке в мувик внешнего клипа..
вероятно потому, что никак не связаны с контентом..

Dr.OH
09.08.2007, 00:54
у меня была точно такая-же проблема... единственное, что я понял, что width и height не меняются ни при загрузке, ни после нее и вообще никак не зависят от того, что мы загрузили в мувик.
единственные параметры, которыми можно управлять - это x, y, xscale, yscale. Хотя, зная изначально размер изображения, этих праметров более чем достаточно.

silin
09.08.2007, 08:42
это не так,
_width, _height напрямую зависят от того, что мы загрузили
_x, _y, _xscale, _rotation, _alpha..- не зависят

LeVitaN
09.08.2007, 10:40
silin и Dr.OH,
Спасибо огромное за ответы.
Проблему решил, определив все обработчики в методе MovieClipLoader().onLoadInit. Изначально рассматривал этот вариант, но видимо что-то криво сделал и при тестировании не получил желаемый результат.
Тепрь все работает :)
Еще раз спасибо.