Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   У програмно созданного Bitmap не работает smoothing? (http://www.flasher.ru/forum/showthread.php?t=131831)

Xpb7 29.10.2009 12:25

У програмно созданного Bitmap не работает smoothing?
 
Народ, нужна помощь!

Для небольшого банера-галереи, пришлось делать следующее изменение:
Сделать попап растягиваемым относительно текста внутри. Раньше бэкграунд попапа
был PNG со smoothing = true; Но для этой цели, чтобы не растягивать Битмап, а то он
некрасиво искажается, я нарисовал такой же попап во флэше, в векторе. Делаю ему
нужный ресайз, а потом рисую его в BitmapData -> Bitmap. Выставляю smoothing = true,
но при анимации он дергается, как дергался старый битмап бэкграунд без smoothing!
Что же это получается? Для такого битмапа не работает smoothing?!

Глянуть сие можно тут:
http://turret.itgrupa.lv/test/tele2/tele2loader.html

Попап появляется при маус оувере на прямоугольные подвижные картинки.
Я для наглядности поставил 2 бэкграунда. Верхний, это старый битмап из library,
нижний это проблемный Bitmap, который я рисую с вектора, он дергается как паралитик.

Hidest 29.10.2009 13:48

Bitmap.cacheAsBitmap

Xpb7 29.10.2009 14:05

cacheAsBitmap стояло:

Код AS3:

var vData:BitmapData = new BitmapData(cWidth, cHeight, true, 0xFFFFFF);
var m:Matrix = new Matrix();
 
m.translate( Math.round( cWidth / 2 ), cHeight - 3);               
vData.draw(this.content, m, null, null, new Rectangle(0, 0, cWidth , cHeight ));
 
var nScreenShot:Bitmap = new Bitmap(vData, "auto", true);
nScreenShot.smoothing = true;
nScreenShot.cacheAsBitmap = true;
 
this.addChild( nScreenShot );


xanderello 29.10.2009 14:10

По моему это не Смуфинг, это пиксельСнапинг - попробуй вместо 'auto' поставить 'always'

Zebestov 29.10.2009 14:18

вот тестовый код
Код AS3:

var s:Shape = new Shape();
s.graphics.beginFill(0);
s.graphics.drawRect(0, 0, 50, 50)
s.graphics.endFill();
 
var bmpd:BitmapData = new BitmapData(50, 50);
bmpd.draw(s, null, null, null, null, true);
 
var bmp1:Bitmap = new Bitmap(bmpd, PixelSnapping.NEVER, true);
//bmp1.cacheAsBitmap = true; // - только все портит
var bmp2:Bitmap = new Bitmap(bmpd, PixelSnapping.AUTO, false);
bmp2.y = 55;
 
var m:MovieClip = new MovieClip();
m.addChild(bmp1);
m.addChild(bmp2);
m.y = 10;
m.x = 10;
addChild(m);
 
addEventListener(Event.ENTER_FRAME, mover);
 
function mover(e:Event):void
{
        x += .1;
}

который показывает проблему: верхний квадратик более-менее плывет, нижний скачет.
но стоит вместо прямоугольника
Код AS3:

s.graphics.drawRect(0, 0, 50, 50)

нарисовать тот же кружок
Код AS3:

s.graphics.drawCircle(25, 25, 22);

как скакать начинают оба 0о

+1 к вопросу — а шо ж делать?

Xpb7 29.10.2009 14:35

Цитата:

Сообщение от xanderello (Сообщение 861838)
По моему это не Смуфинг, это пиксельСнапинг - попробуй вместо 'auto' поставить 'always'

Спасибо, но я пробовал менять снаппинг, не помогло.

Цитата:

Сообщение от Zebestov (Сообщение 861846)
+1 к вопросу — а шо ж делать?

Согласен, что делать чтобы избежать такие скачки?!

И мне неясно, почему Bitmap из Library ведет себя нет так как програмно созданный!
В принципе, проблему функциональности приложения я решил другим способом,
но тема этого поведения не раскрыта!

Zebestov 29.10.2009 14:39

Есть одно решение... его никак элегантным не назовешь, но работает 100%
Таки подставь drawCircle в выше предложенном "стенде для тестов", чтобы было видно, что никакой smothing не помогает, а потом допиши:
Код AS3:

bmp1.height -= .1;

ответ нагуглил, так что в меня палками не кидаться есличо )

Xpb7 29.10.2009 14:53

:eek: Действительно работает, только мне несколько неясно с чем это связано.
Почему не подоходит "правильного" размера битмап?
Спасибо, Zebestov и всем, кто пытался вникнуть.

Однако, не перестану надеяться, что объяснение таких чудес найдется.


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

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