Просмотр полной версии : кривые --> Bitmap (Возможно?)
Есть изображение с многочисленными кривыми. При публикации клипа, сильно загружается процессор. Можно ли как нибудь преобразовать графику в bitmapData и даст ли это толк?
Даст, толк = количество сплайнов / размер битмапДаты.
См. 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.
import flash.display.BitmapData;
var myBitmapData:BitmapData = new BitmapData();
myBitmapData.draw(ripples_mc);
Этого будет достаточно? Как проверить преобразовались кривые в bitmap?
this.create
25.02.2007, 01:48
Удалите мувик с ними.
Битмап без параметров не задают, все четыре параметра конструктора обязательны.
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);
Как проверить?
на счет этого есть интересная вещь http://www.bytearray.org/?p=67
this.create
25.02.2007, 01:59
Вот вы создаете экземпляр класса BitmapData. И создаете его неправильно. Посмотрите в help как надо создавать объекты BitmapData.
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/ Всё равно не пойму.
attachBitmap, читай про этот метод.
import flash.display.*;
var Screen:MovieClip;
Screen = ripples_mc;
Bitmap = new BitmapData();
Screen.attachBitmap(Bitmap, 0);
так?
По подобию вроде так, но впечатление будто в клип загружаем пустой битмап.
Не понятно, attachBitmap, по идее атачит уже битмап в клип, а задача: преобразовать клип с кривыми в битмап (или клип с битмапом).
this.create
25.02.2007, 02:50
Создаете пустой мувиклип. Создаете экземпляр класса BitmapData(new BitmapData). Присоединяете экземпляр класса BitmapData к пустому мувику(attachBitmap). Создаете в экземпляре BitmapData копию вышего векторного рисунка(draw). Как цель для создания копии указываете мувиклип в котором лежит ваш векторный рисунок. Проверяете, удаляя мувик где создали векторный рисунок.
import flash.display.*;
var Screen:MovieClip;
Screen = ripples_mc;
Bitmap = new BitmapData();
Screen.attachBitmap(Bitmap, 0);
так?
По подобию вроде так, но впечатление будто в клип загружаем пустой битмап.
Ну я же писал выше, что параметры надо обязательно указывать при создании BitmapData. А у тебя ни ширины/высоты, ни цвета, ни прозрачности не указано.
Ну я же писал выше, что параметры надо обязательно указывать при создании 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
Создаете пустой мувиклип. Создаете экземпляр класса 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")
Теперь получилось.
2 параметра обязательны - width и height.
Не все праметры обязательны.
А я сказал, что все обязательны? :)
У тебя-то вообще никаких не было.
В draw никаких кавычек, в хелпе что, написано, что там String?
Возможно ли сразу из библиотеки кривые преобразовыватьв bitmap. Иначе получается что существуют сразу и кривые и bitmap.
Есть какие-нибудь рациональные пути решения? Или единственное решение removeMovieClip()?
Возможно ли сразу из библиотеки кривые преобразовыватьв bitmap. Иначе получается что существуют сразу и кривые и bitmap.
Есть какие-нибудь рациональные пути решения? Или единственное решение removeMovieClip()?
Познакомься с АС3, там совсем другая логика работы с "клипами".
Да я видел. Но пока нужно AS 2.
Хочу создать класс, который будет аттачить клипы из библиотеки и преобразовывать в 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);
};
}
}
Не пойму чего не нравится.
Вам что-то вроде этого нужно?
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);
Для чего нужен utils в utils.BitmapUtils ?
Кажется от этого класса никакого толка нет. Проверить это можно прописав в классе:
var bitmap:BitmapData = new BitmapData(100, 100);
Изображение будет таким как в библиотеке, тобишь bitmapa нет.
как то класс не импотрируется, при этом не ругается.
CREDO - почитай где-нибудь про именование классов и пакетов. Можно здесь - http://www.intuit.ru/department/pl/javapl/5/2.html .
Всё это применительно к as.
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)
Что не так?
The class or interface 'BitmapUtils' could not be loaded.
trace(BitmapUtils)
Выводит
А BitmapUtils.as лежит рядом с исходником?
Версия флеша какая, кстати?
Я там ошибся немного вместо target надо mc... И utils перед Bitmap забыл :rolleyes:
lowka, так зачем нужен utils ?
я разместил этот класс в пакете utils (так уж вышло). В принице в данном случае можно было и без этого обойтись.
Я там ошибся немного вместо target надо mc... И utils перед Bitmap забыл :rolleyes:
Lowka спасибо что помогаешь, но класс не рабочий.
подставь.
var bitmap:BitmapData = new BitmapData(100, 100, false, 0x00000000);
по идее должно быть изображение 100 на 100, а получается, оно просто аттачится из библиотеки.
У меня так же не работает :(
я поставил 100 на 100, но клип всё равно полностью отображается.
В классах применять attachMovie не возможно?
Отлично!!!!!!!!!!!!!!!!!!!!
Единственный минус:
рентабельность класса.
Класс практически не упрощает преобразование.
вот пример в те же 6 сторочек, только без класса.
import flash.display.*;
this.createEmptyMovieClip("clip_mc", 0)
var bitmap:BitmapData = new BitmapData(500,100);
clip_mc.attachBitmap(bitmap, 5)
bitmap.draw("lines_mc")
Вот более рентабельный класс!
Используется только 1 мувик.
Для вызова требуется лишь:
import BitmapUtils;
BitmapUtils.movieclipToBitmap("myMovie", ["news", _root, 50, 50, 150,20]);// *Доработав с шириной и высотой
Не получается ширину сделать необязательным параметром.
Ну начнем с того, что ты в функцию передаешь только два аргумента.
И потом, как уже было сказано, ширина и высота для BitmapData являются обязательными параметрами.
Нет. Ширина и высота не обязательные.
Я просто не пойму как написать строку которая будет присваивать значение по умолчанию.
width = undefiend ? with: 100// Это не работает.
Потому что в этой строке две грамматических ошибки и одна синтаксическая.
width = (!isNaN(width) && width > 0) ? width : 100;
Как написать, что бы по умолчанию ширина и высота битмапа была равной ширине и высоте клипа
width = (!isNaN(width) && width>0) ? width :// ?;
import flash.display.BitmapData;
class BitmapUtils {
public static function movieclipToBitmap(linkageID:String, attacher:String, target:MovieClip, position_x:Number, position_y:Number, width:Number, height:Number) {
attacher == undefined ? attacher : "bitmap_mc";
target == undefined ? target : _level;
position_x == undefined ? position_x : 0;
position_y == undefined ? position_y : 0;
width = (!isNaN(width) && width>0) ? width : //?;
height = (!isNaN(height) && height>0) ? height : //?;
var container:MovieClip = target.createEmptyMovieClip(attacher, target.getNextHighestDepth());
container._x = position_x;
container._y = position_y;
container.attachMovie(linkageID, "temp_movie", container.getNextHighestDepth());
var bitmap:BitmapData = new BitmapData(width, height, true, 0x00000000);
bitmap.draw(container);
container.attachBitmap(bitmap, 0);
}
}
target == undefined ? target : _root;Эта строка, почему-то тоже не работает
target = undefined ? target : _root;
target = target==undefined ? _root : target;
Может все-таки открыть хелп и прочитать, что есть оператор «?»?
Вот так тоже работает.
target == undefined ? target : eval("_level")
_etc , как лучше?
CREDO, я вас сейчас на неделю забаню за отсутствие тегов.
CREDO, лучше проанализировать свой же код и понять, что он делает.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.