トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     getPixelsの戻り値
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
htakumu
Åê¹ÆNo.45895
投稿日時: 2010-9-22 8:22
半人前
居住地:
投稿: 38
使用環境:
Windows 7 HomePremium
AdobeFlashCS4
GoogleChrome,IE8
getPixelsの戻り値
ある画像処理をしたく、このように記述していました。
for(var i:int;i<10;i++){
for(var n:int;n<20;i++){
pic_bmd.getPixel(i*5,n*5);//5pxごと
//取得した色の小さな円を描く処理
//モザイクのようになる
}
}
一つ一つループで色を取得していました。
とても遅かったので、getPixelsを使おうと思ったのです。

ByteArrayが返ってくるということがわかったのですが、
どのようにすれば↑の処理と同じように出来るのでしょうか...

ByteArrayからx,y座標を元に色を取得できたらと思っております。
永井勝則
Åê¹ÆNo.45917
投稿日時: 2010-9-22 19:59
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: getPixelsの戻り値
以下は回答というより、実験の結果です。
ここここを参考に、わたしが推測した結果で、正しいかどうかの裏はとれていません。

var image1:BitmapData = new JPGImage(0,0);
var image2:BitmapData = new BitmapData(image1.width,image1.height);
var imageW:Number = image1.width;
var imageH:Number = image1.height;
var stageW:Number = stage.stageWidth;
var stageH:Number = stage.stageHeight;

var rect:Rectangle = new Rectangle(0,0,imageW,imageH);
// 矩形範囲のピクセルをバイト配列で得る
var bytes:ByteArray = image1.getPixels(rect);


for (var i:int = 0; i<imageH; i++) {
	for (var j:int = 0; j<imageW; j++) {
		// バイト配列からカラーチャンネル値を取得し、カラー値を作る
		// Alpha
		// var alphaNum:Number = bytes[imageW * i * 4 + j * 4];
		// Red
		var redNum:Number = bytes[imageW * i * 4 + j * 4 + 1];
		// Green
		var greenNum:Number = bytes[imageW * i * 4 + j * 4 + 2];
		// Blue
		var blueNum:Number = bytes[imageW * i * 4 + j * 4 + 3];

		var color24:Number = redNum << 16 | greenNum << 8 | blueNum;

		/*
		//カラーチャンネル値が調整できる
		bytes[imageW * i * 4 + j * 4] = alphaNum * 1;
		bytes[imageW * i * 4 + j * 4 + 1] = redNum * 1;
		bytes[imageW * i * 4 + j * 4 + 2] = greenNum * 1;
		bytes[imageW * i * 4 + j * 4 + 3] = blueNum * 1;
		*/
		
		// 取得したカラー値で丸を描く
		graphics.beginFill(color24,0.5);
		graphics.drawCircle(Math.random()*stageW,Math.random()*stageH,2);
		graphics.endFill();

	}
}

/*
//調整後のビットマップデータの表示
bytes.position = 0;
image2.setPixels(rect,bytes);
var bm:Bitmap = new Bitmap(image2);
bm.x = stageW/2 - bm.width/2;
bm.y = stageH/2 - bm.height/2;
addChild(bm);
*/


----------------
永井勝則:
himco.jp :

kacchan6
Åê¹ÆNo.45918
投稿日時: 2010-9-23 0:09
新米
居住地:
投稿: 9
使用環境:
Re: getPixelsの戻り値
getVector/setVector使うといいですよ。
ByteArray使うのと原理的にあんまり変わらないですが、
1px1要素となるuintの配列になりますので操作は楽です。
htakumu
Åê¹ÆNo.45921
投稿日時: 2010-9-23 18:56
半人前
居住地:
投稿: 38
使用環境:
Windows 7 HomePremium
AdobeFlashCS4
GoogleChrome,IE8
Re: getPixelsの戻り値
本当にありがとうございます!
とても助かりました。

いままでfor分でgetPixelを一つ一つやっていたので処理の早さに驚きです!
(あたりまえか^^)
htakumu
Åê¹ÆNo.45922
投稿日時: 2010-9-23 18:57
半人前
居住地:
投稿: 38
使用環境:
Windows 7 HomePremium
AdobeFlashCS4
GoogleChrome,IE8
Re: getPixelsの戻り値
kacchan6さんありがとうございます。
参考にさせていただきます!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops