PDA

Просмотр полной версии : allowSmoothing для подгружаемых битмапов?


sinya
29.11.2007, 15:50
Возможно ли как-то установить сглаживание для подгружаемых с помощью loadMovie JPG ? Или единственный способ подгрузить сглаженную картинку - загружать ее внутри СВФ, где для нее стоит сглаживание?

Molecula
29.11.2007, 15:52
По-мойму эту наболевшую тему нужно выносить в верхний баннер.
Ответ: http://zaynutdinoff.livejournal.com/3331.html
На форуме тоже есть темы, вчера-позавчера были тоже.

screamge
29.11.2007, 16:24
sinya, а причём был FAQ?

the_tracker
17.04.2009, 17:35
Ошибка
Этот журнал был окончательно уничтожен.

"по-мойму" эту тему можно откреплять :-)

import flash.display.BitmapData;
class TestLoad extends MovieClip
{
private var a_mc:MovieClip;
private var b_mc:MovieClip;

private var tmp_mc:MovieClip;
private var img_bmp:BitmapData;

private var _tmp_counter:Number = 1;

private var IMG_WIDTH: Number = 210;
private var IMG_HEIGHT: Number = 320;

private var mcl:MovieClipLoader;

public function TestLoad()
{
a_mc = MovieClip(this["a_MC"]);
b_mc = MovieClip(this["b_MC"]);

tmp_mc = createEmptyMovieClip("tmp_MC", 1000);
tmp_mc._x = -500;
tmp_mc._y = -500;
tmp_mc._visible = false;
tmp_mc._alpha = 0;

mcl = new MovieClipLoader();
mcl.addListener(this);

mcl.loadClip("1.jpg", tmp_mc);
}


private function onLoadInit(mc:MovieClip):Void {
fillMc(a_mc, img_bmp);
}

private function fillMc(img_mc:MovieClip, bmp:BitmapData):Void
{
bmp = new BitmapData(IMG_WIDTH, IMG_HEIGHT);
img_mc.attachBitmap(bmp, 5000, "never", true);
trace(bmp);
bmp.draw(tmp_mc);
bmp = null;
delete bmp;


}

}

Добавлено через 12 минут
я правда не видел, что там было... может не то прислал?)))

ОльгаЮрьевна
17.04.2009, 18:06
... как вариант:

mc._quality = "BEST"; // Ставим самое лучшее качество картинки
mc.forceSmoothing = true; // Ставим сглаживание картинки

Seraf
24.05.2010, 08:23
... как вариант:

mc._quality = "BEST"; // Ставим самое лучшее качество картинки
mc.forceSmoothing = true; // Ставим сглаживание картинки


mc.forceSmoothing = true что-то не работает. В коде подгружается в фильм jpg, ресайзится, центруется. Пробовал эту строку вставлять и перед этими оперциями и после. Подскажите как корректно использовать эту функцию.
Вот код:

clip2.maxWidth = 200;
clip2.maxHeight = 200;
//
clip2.loadImage = function(file)
{
this.image.removeMovieClip();
this.createEmptyMovieClip("image", 0);
this.image.loadMovie(file);
this.onEnterFrame = function()
{
var l = this.image.getBytesLoaded();
var t = this.image.getBytesTotal();
if (t>0 && l>=t) {
// загрузка закончилась
delete this.onEnterFrame;
this.resize();
}
};
};
//
clip2.resize = function()
{
var ratio_x = this.maxWidth/this.image._width;
var ratio_y = this.maxHeight/this.image._height;
if (ratio_x<=ratio_y) {
// выполняем, если нужно уменьшить,
// или увеличить+увеличение разрешено
if (ratio_x<1 || this.allowEnlarge) {
// ширина равна максимальной
// а высота в соответствии с пропорцией
this.image._width = this.maxWidth;
this.image._yscale = this.image._xscale;
}
} else {
// выполняем, если нужно уменьшить,
// или увеличить+увеличение разрешено
if (ratio_y<1 || this.allowEnlarge) {
// высота равна максимальной
// а ширина в соответствии с пропорцией
this.image._height = this.maxHeight;
this.image._xscale = this.image._yscale;
}
}
// центровка
this.image._x = Math.round((this.maxWidth-this.image._width)/2);
this.image._y = Math.round((this.maxHeight-this.image._height)/2);

};

clip2.loadImage("2.jpg");

mooncar
24.05.2010, 10:35
Поставьте в resize()
this.forceSmoothing = true;
в любое место, например, в самом конце, после центровки.
Я часто использую это свойство, и все нормально работает.
И кстати, лучше используйте MCL вместо loadMovie.

Seraf
24.05.2010, 16:39
Поставьте в resize()
this.forceSmoothing = true;
в любое место, например, в самом конце, после центровки.
Я часто использую это свойство, и все нормально работает.
И кстати, лучше используйте MCL вместо loadMovie.

Попробовал поставить строку после центровки. Не работает. Проверил анимацей растягивания после подгрузки - всё в лесенках.

mooncar
24.05.2010, 20:47
Смотрите вложение.

Используйте MCL, я же писал об этом.

Вместо loadVariables используйте класс LoadVars, и тогда у вас будет меньше поводов в ближайшее время обращаться за помощью сюда.

Не разносите код по разным слоям.

PS. Думаю, что большего сглаживания добиться трудно. А если все же хотите, чтобы выглядело лучше, возьмите размеры, до которых у вас увеличится картинка при максимальном ее развертывании, и пересохраните с этими размерами.
Сейчас у вас 2.jpg неоправданно большая. Лучшего сглаживания, чем сделал я с помощью forceSmoothing, вряд ли можно будет добиться в силу указанной причины.

PPS. Переход к анимации тоже нужно сделать только после окончания процесса загрузки.
То есть написать в ключевом кадре, где стартует загрузка stop(), а продолжить движение - play() - внутри обработчика onLoadInit. Иначе у вас анимация стартует раньше, чем закончится процесс загрузки. Локально прокатит, на сайте могут быть косяки. Конечно, вы ввели дополнительные кадры между началом анимации и кадром, где стартует загрузка, но это плохое решение, если рассчитано только под ожидание загрузки. Даже если это сюжетная пауза, все равно нужно сделать так - stop() в этом кадре и play() внутри onLoadInit, в самом конце, после forceSmoothing.

В общем, уменьшайте размер картинки, если это возможно.

UPD. Ради пробы уменьшил размер 2.jpg до 500px по ширине, и сразу, несмотря на то, что при увеличении до 400 процентов, как у вас в конце анимации, появляется некая размазанность, все равно выглядит лучше, по крайней мере, сама анимация.

Seraf
24.05.2010, 21:42
2 mooncar
Весьма признателен за советы. 1-й раз таки решился сделать сам подгрузку файлов (коды, конечно писал не я и в Вашем на 1-й взляд пока много чего непонятно) и текстов т.к. нужно чтобы в последствии заказчик сам заменял фотографии товаров и цен. Там я не могу предугадать насколько большие у них будут исходники ну и врядли они захотят учиться ресайзить фото потому намеренно взял большие.

Да в Вашем примере сглаживание в порядке. Имеено так, как если внедрить jpg и включить в его свойствах allow smothing чего я и добивался.
Выходит используя loadMovie сглаживания добиться нельзя? forceSmoothing работает только с MCL? Cлышал ещё про мороку с переводом в bitmap. Это сработает в loadMovie?

mooncar
24.05.2010, 21:52
Пропишите правильный свой путь в настройках публикации swf. Там указан абсолютный путь в мою папку, а не относительный в виде просто названия ролика smooth2.swf