Форум 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)
-   -   кривые --> Bitmap (Возможно?) (http://www.flasher.ru/forum/showthread.php?t=92442)

CREDO 25.02.2007 00:29

кривые --> Bitmap (Возможно?)
 
Есть изображение с многочисленными кривыми. При публикации клипа, сильно загружается процессор. Можно ли как нибудь преобразовать графику в bitmapData и даст ли это толк?

miramax 25.02.2007 00:35

Даст, толк = количество сплайнов / размер битмапДаты.
См. bitmapData.draw();

this.create 25.02.2007 01:09

Цитата:

This class lets you separate bitmap rendering operations from the Flash Player internal display updating routines. By manipulating a BitmapData object directly, you can create very complex images without incurring the per-frame overhead of constantly redrawing the content from vector data.
Как раз для этих случаев изобрели BitmapData.

CREDO 25.02.2007 01:46

Код:

import flash.display.BitmapData;
var myBitmapData:BitmapData = new BitmapData();
myBitmapData.draw(ripples_mc);

Этого будет достаточно? Как проверить преобразовались кривые в bitmap?

this.create 25.02.2007 01:48

Удалите мувик с ними.

etc 25.02.2007 01:48

Битмап без параметров не задают, все четыре параметра конструктора обязательны.

CREDO 25.02.2007 01:52

Код:

import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.geom.ColorTransform;
var myBitmapData:BitmapData = new BitmapData();
var myMatrix:Matrix = new Matrix();
myMatrix.rotate(Math.PI/2);
var translateMatrix:Matrix = new Matrix();
translateMatrix.translate(70, 15);
myMatrix.concat(translateMatrix);
var myColorTransform:ColorTransform = new ColorTransform(0, 0, 1, 1, 0, 0, 255, 0);
var blendMode:String = "normal";
var myRectangle:Rectangle = new Rectangle(0, 0, 100, 80);
var smooth:Boolean = true;
myBitmapData.draw(ripples_mc, myMatrix, myColorTransform, blendMode, myRectangle, smooth);

Как проверить?

Woozle 25.02.2007 01:57

на счет этого есть интересная вещь http://www.bytearray.org/?p=67

this.create 25.02.2007 01:59

Вот вы создаете экземпляр класса BitmapData. И создаете его неправильно. Посмотрите в help как надо создавать объекты BitmapData.

CREDO 25.02.2007 02:04

Код:

import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Matrix;
import flash.geom.ColorTransform;

var myBitmapData:BitmapData = new BitmapData(100, 80, false, 0x00CCCCCC);

var mc_1:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc_1.attachBitmap(myBitmapData, this.getNextHighestDepth());

var mc_2:MovieClip = createRectangle(50, 40, 0xFF0000);
mc_2._x = 101;

var myMatrix:Matrix = new Matrix();
myMatrix.rotate(Math.PI/2);

var translateMatrix:Matrix = new Matrix();
translateMatrix.translate(70, 15);

myMatrix.concat(translateMatrix);

var myColorTransform:ColorTransform = new ColorTransform(0, 0, 1, 1, 0, 0, 255, 0);
var blendMode:String = "normal";

var myRectangle:Rectangle = new Rectangle(0, 0, 100, 80);
var smooth:Boolean = true;

mc_1.onPress = function() {
    myBitmapData.draw(mc_2, myMatrix, myColorTransform, blendMode, myRectangle, smooth);
}

function createRectangle(width:Number, height:Number, color:Number):MovieClip {
    var depth:Number = this.getNextHighestDepth();
    var mc:MovieClip = this.createEmptyMovieClip("mc_" + depth, depth);
    mc.beginFill(color);
    mc.lineTo(0, height);
    mc.lineTo(width, height);
    mc.lineTo(width, 0);
    mc.lineTo(0, 0);
    return mc;
}


Вот из helpa/ Всё равно не пойму.

etc 25.02.2007 02:10

attachBitmap, читай про этот метод.

CREDO 25.02.2007 02:19

Код:

import flash.display.*;
var Screen:MovieClip;
Screen = ripples_mc;
Bitmap = new BitmapData();
Screen.attachBitmap(Bitmap, 0);

так?

По подобию вроде так, но впечатление будто в клип загружаем пустой битмап.

CREDO 25.02.2007 02:35

Не понятно, attachBitmap, по идее атачит уже битмап в клип, а задача: преобразовать клип с кривыми в битмап (или клип с битмапом).

this.create 25.02.2007 02:50

Создаете пустой мувиклип. Создаете экземпляр класса BitmapData(new BitmapData). Присоединяете экземпляр класса BitmapData к пустому мувику(attachBitmap). Создаете в экземпляре BitmapData копию вышего векторного рисунка(draw). Как цель для создания копии указываете мувиклип в котором лежит ваш векторный рисунок. Проверяете, удаляя мувик где создали векторный рисунок.

etc 25.02.2007 11:39

Цитата:

Сообщение от CREDO
Код:

import flash.display.*;
var Screen:MovieClip;
Screen = ripples_mc;
Bitmap = new BitmapData();
Screen.attachBitmap(Bitmap, 0);

так?

По подобию вроде так, но впечатление будто в клип загружаем пустой битмап.

Ну я же писал выше, что параметры надо обязательно указывать при создании BitmapData. А у тебя ни ширины/высоты, ни цвета, ни прозрачности не указано.

CREDO 25.02.2007 12:16

Цитата:

Сообщение от __etc
Ну я же писал выше, что параметры надо обязательно указывать при создании BitmapData. А у тебя ни ширины/высоты, ни цвета, ни прозрачности не указано.

Вот пример из help. Не все праметры обязательны.

Код:

import flash.display.BitmapData;

var width:Number = 100;
var height:Number = 80;
var transparent:Boolean = true;
var fillColor:Number = 0xFFFFFFFF;

var bitmap_1:BitmapData = new BitmapData(width, height, transparent, fillColor);

trace(bitmap_1.width); // 100
trace(bitmap_1.height); // 80
trace(bitmap_1.transparent); // true

var bitmap_2:BitmapData = new BitmapData(width, height);

trace(bitmap_2.width); // 100
trace(bitmap_2.height); // 80
trace(bitmap_2.transparent); // true


CREDO 25.02.2007 12:38

Цитата:

Сообщение от this.create
Создаете пустой мувиклип. Создаете экземпляр класса BitmapData(new BitmapData). Присоединяете экземпляр класса BitmapData к пустому мувику(attachBitmap). Создаете в экземпляре BitmapData копию вышего векторного рисунка(draw). Как цель для создания копии указываете мувиклип в котором лежит ваш векторный рисунок. Проверяете, удаляя мувик где создали векторный рисунок.


Код:

import flash.display.*;
this.createEmptyMovieClip("clip_mc", 0)
var bitmap:BitmapData = new BitmapData(500,100);
clip_mc.attachBitmap(bitmap, 5)
bitmap.draw("lines_mc")

Теперь получилось.

miramax 25.02.2007 12:55

2 параметра обязательны - width и height.

etc 25.02.2007 12:59

Цитата:

Сообщение от CREDO
Не все праметры обязательны.

А я сказал, что все обязательны? :)
У тебя-то вообще никаких не было.

В draw никаких кавычек, в хелпе что, написано, что там String?

CREDO 25.02.2007 13:18

Возможно ли сразу из библиотеки кривые преобразовыватьв bitmap. Иначе получается что существуют сразу и кривые и bitmap.

Есть какие-нибудь рациональные пути решения? Или единственное решение removeMovieClip()?

miramax 25.02.2007 14:39

Цитата:

Сообщение от CREDO
Возможно ли сразу из библиотеки кривые преобразовыватьв bitmap. Иначе получается что существуют сразу и кривые и bitmap.

Есть какие-нибудь рациональные пути решения? Или единственное решение removeMovieClip()?

Познакомься с АС3, там совсем другая логика работы с "клипами".

CREDO 25.02.2007 14:45

Да я видел. Но пока нужно AS 2.

CREDO 25.02.2007 16:30

Хочу создать класс, который будет аттачить клипы из библиотеки и преобразовывать в bitmap по типу описанном выше.

Код:

import flash.display.BitmapData;
class CreateBitmap {
        function CreateBitmap(target:MovieClip) {
                MovieClip.prototype.addCreateBitmap = function() {
                        var position:MovieClip = this;
                        var target_width = target._width;
                        var target_height = target._height;
                        var bitmap:BitmapData = new BitmapData(target_width, target_height, true, 0xFFFFFF);
                        position.createEmptyMovieClip(target, 100);
                };
        }
}

Не пойму чего не нравится.

lowka 25.02.2007 17:15

Вам что-то вроде этого нужно?
Код:

import flash.display.BitmapData;

class utils.BitmapUtils {
        /**
        * Метод. Создание bitmap-копии мувика.
        * @param        target мувик, который хотим перегнать в bitmap.
        * @param        depth глубина на которой будет располагаться bitmap-копия мувика.
        */
        public static function movieclipToBitmap(target:MovieClip, depth:Number):Void {
                if(!MovieClip(target)){
                        return;
                }
                var bitmap:BitmapData = new BitmapData(target._width, target._height, true, 0x00000000);
                bitmap.draw(target);
               
                target._parent.attachBitmap(bitmap, depth);
                target.removeMovieClip();
        }
}

Использование:
Код:

import BitmapUtils;

var mc:MovieClip = this.attachMovie("libraryID", "anyName", 0);
BitmapUtils.movieclipToBitmap(target, 10);


CREDO 25.02.2007 18:01

Для чего нужен utils в utils.BitmapUtils ?

CREDO 25.02.2007 18:19

Кажется от этого класса никакого толка нет. Проверить это можно прописав в классе:
Код:

var bitmap:BitmapData = new BitmapData(100, 100);
Изображение будет таким как в библиотеке, тобишь bitmapa нет.

CREDO 25.02.2007 18:27

как то класс не импотрируется, при этом не ругается.

miramax 25.02.2007 18:33

CREDO - почитай где-нибудь про именование классов и пакетов. Можно здесь - http://www.intuit.ru/department/pl/javapl/5/2.html .
Всё это применительно к as.

CREDO 25.02.2007 18:56

BitmapUtils.as
Код:

import flash.display.BitmapData;
class BitmapUtils {
        public static function movieclipToBitmap(target:MovieClip, depth:Number):Void {
                if (!MovieClip(target)) {
                        return;
                }
                var bitmap:BitmapData = new BitmapData(100, 100);
                bitmap.draw(target);
                target._parent.attachBitmap(bitmap, depth);
                target.removeMovieClip();
        }
}

*.fla
Код:

import BitmapUtils;
trace(BitmapUtils)

Что не так?

etc 25.02.2007 18:57

А что трейсит-то?

CREDO 25.02.2007 18:59

The class or interface 'BitmapUtils' could not be loaded.
trace(BitmapUtils)

Выводит

etc 25.02.2007 19:53

А BitmapUtils.as лежит рядом с исходником?
Версия флеша какая, кстати?

lowka 25.02.2007 20:01

Вложений: 1
Я там ошибся немного вместо target надо mc... И utils перед Bitmap забыл :rolleyes:

CREDO 25.02.2007 20:01

Версия 8. Лежит рядом.

CREDO 25.02.2007 20:05

lowka, так зачем нужен utils ?

lowka 25.02.2007 20:15

я разместил этот класс в пакете utils (так уж вышло). В принице в данном случае можно было и без этого обойтись.

CREDO 25.02.2007 20:16

Цитата:

Сообщение от lowka
Я там ошибся немного вместо target надо mc... И utils перед Bitmap забыл :rolleyes:

Lowka спасибо что помогаешь, но класс не рабочий.

подставь.

var bitmap:BitmapData = new BitmapData(100, 100, false, 0x00000000);


по идее должно быть изображение 100 на 100, а получается, оно просто аттачится из библиотеки.

CREDO 25.02.2007 20:17

Это точно для AS 2?

lowka 25.02.2007 20:52

Вложений: 1
Переделал немного.

CREDO 25.02.2007 21:05

У меня так же не работает :(

я поставил 100 на 100, но клип всё равно полностью отображается.


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

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