Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.11.2008, 22:51
elniko вне форума Посмотреть профиль Отправить личное сообщение для elniko Найти все сообщения от elniko
  № 1  
Ответить с цитированием
elniko
 
Аватар для elniko

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
Attention Erise "проявляется" при сборе BitmapData с клипа.

У меня есть клип main_mc с .blendMode = "layer";
в него вложены клипы с .blendMode = "erase";

при присмотре флешки все ок -- клипы-эрайсеры работают как маска, НО когда я преобразую main_mc в BitmapData, то erase-клипы становятся видны, не выполняют функцию маски....

код отправки битмапа скрипту:

Код:
	var data_bmp:BitmapData = new BitmapData(glHolstW,glHolstH);
	data_bmp.draw(main_mc);
	var png_image_data:ByteArray = PNGEncoder.encode(data_bmp);

	var url_req:URLRequest=new URLRequest("img_create.php");
	url_req.data = png_image_data;
	url_req.method = URLRequestMethod.POST;

	var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
	url_req.requestHeaders.push(header);
	navigateToURL(url_req);
PNG Encoder

Код:
package {
	import flash.geom.*;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.utils.ByteArray;

	public class PNGEncoder {
		public static function encode(img:BitmapData):ByteArray {
			
			var png:ByteArray = new ByteArray();
			png.writeUnsignedInt(0x89504e47);
			png.writeUnsignedInt(0x0D0A1A0A);

			var IHDR:ByteArray = new ByteArray();
			IHDR.writeInt(img.width);
			IHDR.writeInt(img.height);
			IHDR.writeUnsignedInt(0x08060000);
			IHDR.writeByte(0);
			writeChunk(png,0x49484452,IHDR);

			var IDAT:ByteArray= new ByteArray();
			for (var i:int=0; i < img.height; i++) {
				IDAT.writeByte(0);
				var p:uint;
				var j:int;
				if ( !img.transparent ) {
					for (j=0; j < img.width; j++) {
						p = img.getPixel(j,i);
						IDAT.writeUnsignedInt(uint(((p&0xFFFFFF) << 8)|0xFF));
					}
				} else {
					for (j=0; j < img.width; j++) {
						p = img.getPixel32(j,i);
						IDAT.writeUnsignedInt(uint(((p&0xFFFFFF) << 8)|(p>>>24)));
					}
				}
			}
			IDAT.compress();
			writeChunk(png,0x49444154,IDAT);
			writeChunk(png,0x49454E44,null);
			return png;
		}
		private static  var crcTable:Array;
		private static  var crcTableComputed:Boolean = false;

		private static function writeChunk(png:ByteArray, type:uint, data:ByteArray):void {
			if (!crcTableComputed) {
				crcTableComputed = true;
				crcTable = [];
				var c:uint;
				for (var n:uint = 0; n < 256; n++) {
					c = n;
					for (var k:uint = 0; k < 8; k++) {
						if (c & 1) {
							c = uint(uint(0xedb88320) ^ uint(c >>> 1));
						} else {
							c = uint(c >>> 1);
						}
					}
					crcTable[n] = c;
				}
			}
			var len:uint = 0;
			if (data != null) {
				len = data.length;
			}
			png.writeUnsignedInt(len);
			var p:uint = png.position;
			png.writeUnsignedInt(type);
			if ( data != null ) {
				png.writeBytes(data);
			}
			var e:uint = png.position;
			png.position = p;
			c = 0xffffffff;
			for (var i:int = 0; i < (e-p); i++) {
				c = uint(crcTable[(c ^ png.readUnsignedByte()) & uint(0xff)] ^ uint(c >>> 8));
			}
			c = uint(c^uint(0xffffffff));
			png.position = e;
			png.writeUnsignedInt(c);
		}
	}
}
__________________
graff.org.ru - рисуем граффити вКонтакте :)


Последний раз редактировалось elniko; 08.11.2008 в 00:57.
Старый 08.11.2008, 01:17
s8000_1 вне форума Посмотреть профиль Отправить личное сообщение для s8000_1 Найти все сообщения от s8000_1
  № 2  
Ответить с цитированием
s8000_1
 
Аватар для s8000_1

Регистрация: Jun 2007
Сообщений: 374
Код:
var temp:Sprite = new Sprite();
temp.addChild(main_mc);

var data_bmp:BitmapData = new BitmapData(glHolstW,glHolstH);
data_bmp.draw(temp);

Старый 08.11.2008, 03:04
elniko вне форума Посмотреть профиль Отправить личное сообщение для elniko Найти все сообщения от elniko
  № 3  
Ответить с цитированием
elniko
 
Аватар для elniko

Регистрация: Oct 2008
Адрес: MSC
Сообщений: 27
Отправить сообщение для elniko с помощью ICQ
Неа, нифига...В этом случае получается вот что:
Изображения
 
__________________
graff.org.ru - рисуем граффити вКонтакте :)

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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