Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   allowSmoothing для подгружаемых битмапов? (http://www.flasher.ru/forum/showthread.php?t=104652)

sinya 29.11.2007 15:50

allowSmoothing для подгружаемых битмапов?
 
Возможно ли как-то установить сглаживание для подгружаемых с помощью 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

Ошибка
Этот журнал был окончательно уничтожен.

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

Код AS1/AS2:

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

... как вариант:
Код AS1/AS2:

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


Seraf 24.05.2010 08:23

Цитата:

Сообщение от ОльгаЮрьевна (Сообщение 813633)
... как вариант:
Код AS1/AS2:

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


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

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()
Код AS1/AS2:

this.forceSmoothing = true;

в любое место, например, в самом конце, после центровки.
Я часто использую это свойство, и все нормально работает.
И кстати, лучше используйте MCL вместо loadMovie.

Seraf 24.05.2010 16:39

Вложений: 1
Цитата:

Сообщение от mooncar (Сообщение 910491)
Поставьте в resize()
Код AS1/AS2:

this.forceSmoothing = true;

в любое место, например, в самом конце, после центровки.
Я часто использую это свойство, и все нормально работает.
И кстати, лучше используйте MCL вместо loadMovie.

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

mooncar 24.05.2010 20:47

Вложений: 1
Смотрите вложение.

Используйте 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?


Часовой пояс GMT +4, время: 09:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.