Можно ли сглаживание изображения в загруженном SWF?

Я пытаюсь загрузить SWF в другой в AS3/Haxe. Загруженный SWF содержит некоторые изображения, но только на некоторых Shape.graphics элементах. (вроде graphics.beginBitmapFill();...) Это изображения не сглаженные, а неровные. Можно ли как-то сгладить эти изображения во время выполнения? Любой взлом заинтересован! :)

Заранее спасибо! Том

Обновление: извините, но я забыл упомянуть, что я загружаю несколько файлов AS2-SWF (AVM1) в один файл AS3-SWF (AVM2) с помощью AVM2Loader, которые взламывают загруженные байты и конвертируют SWF-файлы AVM1. в AVM2 - работает очень хорошо. :)

Итак, в этих SWF-файлах мне нужно найти изображения / растровые изображения, но я нашел только Shapes, какие graphics элементы имеют «изображения». Если я уберу этот graphics, то все изображения пропадут, поэтому я думаю, что изображения в каком-то graphics.beginBitmapFill(...);, без сглаживания. Я хочу добраться до них и включить сглаживание во время выполнения, если это возможно. (Извините, если в первый раз я был недостаточно ясен.)

Изменить (23 января 2014 г.): я нашел для этого решение. Это не быстро, и требуется Flash Player 11.6. Каждое MovieClip графическое свойство имеет новую readGraphicsData функцию, которая дает все графические команды (Vector IGraphicsData) для отрисовки всего MC. И повторите эти команды, если я изменю каждый параметр bitmapFill команды smooth на true и перерисую MC, он будет сглажен и хорош. Вот и все. Не быстро, но работает.


person TomH    schedule 28.03.2013    source источник
comment
Попробуйте stage.quality=StageQuality.HIGH и посмотрите, изменилось ли что-нибудь.   -  person Vesper    schedule 28.03.2013
comment
Качество на BEST, пробовал и HIGH_8X8, и HIGH_16X16, но ничего. :-/   -  person TomH    schedule 28.03.2013


Ответы (3)


Я нашел решение для него. Это не быстро, и требуется Flash Player 11.6. Каждое MovieClip графическое свойство имеет новую readGraphicsData функцию, которая дает все графические команды (Vector IGraphicsData) для отрисовки всего MC. И повторите эти команды, если я изменю каждый параметр bitmapFill команды smooth на true и перерисую MC, он будет сглажен и хорош. Вот и все. Не быстро, но работает.

person TomH    schedule 23.01.2014
comment
Если я правильно помню: используя readGraphichData(recursive:Boolean = true) для объекта Graphics, вы получите Vector.‹IGraphicsData›. Если вы повторите его и найдете все GraphicsBitmapFill. А если параметр smooth равен false, то установите его в true, и переменную тоже установите в true, чтобы вы знали, что нужно перерисовывать саму фигуру. И если вы что-то изменили, вам просто нужно использовать drawGraphicsData(graphicsData:Vector.‹IGraphicsData›) с измененными графическими данными, и все готово. - person TomH; 15.03.2017
comment
Заранее спасибо. - person payam_sbr; 15.03.2017

Сглаживание — это свойство растровых изображений это выключено по умолчанию.

var image = new Bitmap(bitmapData);
image.smoothing = true;

Как правило, ваши bitmapData будут находиться в loader.content.bitmapData при внешней загрузке, но вам решать, где вы их сохранили.


Обновление:

Если вы хотите сгладить все изображения в загруженном SWF без каких-либо знаний о структуре SWF, вам придется рекурсивно копаться в иерархии этого SWF и, в зависимости от того, является ли объект Bitmap или нет, включите сглаживание.

function recursivelySmooth(obj):void {
    for (var i:int = 0; obj.getChildAt(i); i++) {
        var item:* = obj.getChildAt(i);
        if (item is Bitmap) {
            item.smoothing = true;
        } else if (item.hasOwnProperty("numChildren") == true) {
            recursivelySmooth(item);
        }
    }
}

Это было написано от руки, поэтому вам, возможно, придется перепроверить все правильно, но это основная идея. Просто вызовите recursivelySmooth() в вашем SWF-файле, и он просмотрит все объекты, которые могут иметь дочерние элементы, и сгладит их.

person Atriace    schedule 28.03.2013
comment
Но я загружаю SWF, а не BitmapData. И если я найду фигуру, содержащую изображения, и удалю графический элемент этой фигуры, изображение исчезнет. Я хочу найти изображения через загруженный SWF, но как? Любой низкоуровневый «хак» интересен, только во время выполнения! - person TomH; 28.03.2013
comment
Обновление: Спасибо, стало намного лучше, и я тоже разобрался. Но он не работает на этих SWF. :-/ - person TomH; 28.03.2013

person    schedule
comment
Спасибо, но forceSmoothing не поддерживается в AS3, вот в чем проблема. (В AS2 это работает.) - person TomH; 28.03.2013