as3 BitmapData copyPixels

BitmapDatalar ile çalışırken çeşitli işlemleri yapabilmemiz için bir çok fonksiyon ve built-in metod bulunuyor. Ben ihtiyacım olan getPixels() ve setPixels() metodlarını kullandım. Kullanımı gayet basit ve anlaşılır yapmışlar. Aşağıdaki örnekte de göreceğiniz gibi ilk olarak iki adet bitmapData oluşturuyorum bunlar üzerinde hiç bir işlem yapmayacağım için false verip oluşturduğum bitmapdata’nın görünmesini sağlıyorum(aynı zamanda png kullanmadığımız zaman jpg ile çalışıyorsak bu seçeneği seçmemiz gerekir.)

Daha sonra bir tane bitmapdata’mın kaplayacağı alanı belirlemek için bir rectangle değeri oluşturuyorum ve bitmapdatadan ne kadar alan alacağımı belirtiyorum. Daha sonra getPixels ile aldığım dataların(array türünde veriyor getPixels değerleri.) byteArray değerine atıyorum. Daha sonra bytelarımın poziyonlarını 0 a çekiyorum.

Daha sonra oluşturduğum copyBmd değerinin setPixels() metoduyla seçeceğim pixelleri kendi belirlediğim pixellerle yer değiştiriyorum. Bu iki parametre alıyor;

  • copyRect (rectangle türünde alıyor.)
  • bytes (byte array türünde pixellerin değerlerini alıyor)

buraya kadar işlemlerimiz tamamlanmış oldu.  Daha sonra bitmapdata objelerimiz birer “data” objeleri olduğu için displayobject’e ekleyemiyoruz o yüzden bunları bir display object’e ekliyip sahnede gösteriyoruz.

var originBmd:BitmapData = new BitmapData(100,100,false, 0xFF0000);
var copyBmd:BitmapData = new BitmapData(100,100, false, 0x006699);

var copyRect:Rectangle = new Rectangle(0,0,50,50);
var bytes:ByteArray = originBmd.getPixels(copyRect);
bytes.position = 0;

copyBmd.setPixels(copyRect,bytes);

var originBm:Bitmap = new Bitmap(originBmd);
var copyBm:Bitmap = new Bitmap(copyBmd);

addChild(originBm);
addChild(copyBm);

copyBm.x += originBm.width + 10; 
Advertisements

as3 static XML in variable defination

Herşeyde önümüze çıkacak bir engel değil ancak Air ile Andorid uygulaması geliştirdiğim zamanda yazılımcıdan bilgilerin onun tarafına XML şeklinde vermemi istemişti. Bu yüzden araştırdım ve bu şekilde bir şey buldum. Yani statik bir xml’in içine değişken tanımlaması yapabiliyoruz. Şu şekilde ;

var degisken:String = "serhat";
var xml:XML = <data><node>{degisken}</node></data>;

trace(xml);

as3 virgul operator yardımcı sınıfı

var outputStr:String;
var sourceStr:String;
var tn:Number;
var split:Number;
var flatSplit:Number;
var diff:Number;
var currNum:Number;


trace(processNumber(50000000000000));

function processNumber(_num:Number):String
{
	if (_num < 100)
	{
		outputStr = _num.toString();
	}
	else
	{
		outputStr = "";
		sourceStr = _num.toString();
		trace("source str " + sourceStr);
		tn = sourceStr.length;
		trace("source str length -tn- " + tn);
		split = (tn / 3);
		trace("split  " + split);
		flatSplit = Math.floor(tn / 3);
		trace("flat split  " + flatSplit);
		diff = tn - (flatSplit * 3);
		trace("diff  " + diff);
		currNum = 0;

		if (diff > 0)
		{
			outputStr +=  sourceStr.slice(currNum,diff) + ",";
			sourceStr = sourceStr.slice(diff,tn);
		}

		var p1:Number;
		var p2:Number;

		for (var i:int = 0; i < flatSplit; i++)
		{
			p1 = i * 3;
			p2 = p1 + 3;

			if (i > 0)
			{
				outputStr +=  ",";
			}
			outputStr +=  sourceStr.slice(p1,p2);
		}

	}

	return outputStr;
}

as3 textfield debugger

import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.events.MouseEvent;

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDownHandler);
send_btn.addEventListener(MouseEvent.CLICK, onClick);

var isActiveForm:Boolean = false;
var isActiveWrite:Boolean = true;

function onKeyDownHandler(event:KeyboardEvent):void
{
	if (event.shiftKey && event.ctrlKey)
	{
		isActiveForm = ! isActiveForm;
		isActiveWrite = false;
	}

	if (isActiveForm)
	{
		fillIn();
	}
	else
	{
		removeFields();
	}
}

function fillIn():void
{
	txt.text = "isim";
	txt1.text = "soyisim";
	txt2.text = "e-mail";
	txt3.text = "adres";
}

function removeFields():void
{
	if (isActiveWrite != true)
	{
		isActiveWrite = true;
		txt.text = "";
		txt1.text = "";
		txt2.text = "";
		txt3.text = "";
	}

}

function onClick(event:MouseEvent):void
{
	trace("------ SEND ");
	trace(txt.text + "\n" + txt1.text + "\n" + txt2.text+ "\n" + txt3.text  );
}