AS3でドット模様のビットマップテクスチャを全画面に描画する「BitmapTexture」クラス

BitmapTexture

BitmapTexture

ActionScript3.0でドット模様のビットマップテクスチャを全画面に描画する「BitmapTexture」クラスを作成しました。

背景全画面に読み込んだ画像の上へ重ねてみたところ、目の錯覚で画質が若干改善したように感じます。

デフォルトではユーザーの解像度を取得し全画面に描画しますが、ステージサイズや任意のサイズを指定することも可能です。

下記のボタンより、ソースのダウンロード及びサンプルの閲覧ができます。

Sample Download

【使用例】

TEXTURE(DisplayObjectContainer)にライブラリのリンケージクラス '_BitmapTexture'を読み込み全画面に描画


BitmapTexture.load(TEXTURE);

TEXTURE(DisplayObjectContainer)にドットテクスチャを全画面に描画


BitmapTexture.draw(TEXTURE);

TEXTURE(DisplayObjectContainer)の縦480ピクセル×横240ピクセルの範囲へドットテクスチャを描画


BitmapTexture.draw(TEXTURE, 480, 240);

【パラメータ説明】

$scope


テクスチャを描画するオブジェクト
[DisplayObjectContainer][省略不可]

w


テクスチャを描画する横範囲
[規定値:0 -> 代入値:Capabilities.screenResolutionX][省略可]

h


テクスチャを描画する縦範囲
[規定値:0 -> 代入値:Capabilities.screenResolutionY][省略可]

p1


BitmapDataの第1・第2引数へ代入される値(調整用)
[規定値:2][省略可]

p2


BitmapData.setPixel32の第1・第2引数へ代入される値(調整用)
[規定値:0][省略可]

p3


BitmapData.setPixel32の第1・第2引数へ代入される値(調整用)
[規定値:1][省略可]

ソースコード

import jp.atziluth.gui.BitmapTexture;


package jp.atziluth.gui{
import flash.display.DisplayObjectContainer;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.system.Capabilities;
import jp.atziluth.utils.cleaner;
public class BitmapTexture extends Sprite {
private static var scope:DisplayObjectContainer;
private static var w:uint;
private static var h:uint;
private static var bmd:BitmapData;
private static var sp:Sprite;
public static function draw($scope:DisplayObjectContainer, w:uint=0, h:uint=0, p1:uint=2, p2:uint=0, p3:uint=1):void {
if ($scope == null) {
return;
}
BitmapTexture.initialize($scope, w, h);
var bmd:BitmapData = new BitmapData(p1,p1,true,0x00FFFFFF);
bmd.setPixel32(p2, p2, 0xFF000000);
bmd.setPixel32(p3, p3, 0xFF000000);
BitmapTexture.bmd = bmd;
BitmapTexture.beginFill();
BitmapTexture.addStage();
}
public static function load($scope:DisplayObjectContainer, w:uint=0, h:uint=0):void {
if ($scope == null) {
return;
}
BitmapTexture.initialize($scope, w, h);
var bmd:BitmapData = new _BitmapTexture(0,0);
BitmapTexture.bmd = bmd;
BitmapTexture.beginFill();
BitmapTexture.addStage();
}
private static function initialize($scope:DisplayObjectContainer, w:uint, h:uint):void {
BitmapTexture.scope = $scope;
w ? BitmapTexture.w = w:BitmapTexture.w = Capabilities.screenResolutionX;
h ? BitmapTexture.h = h:BitmapTexture.h = Capabilities.screenResolutionY;
}
private static function beginFill():void {
var sp:Sprite = new Sprite();
sp.graphics.beginBitmapFill(BitmapTexture.bmd, null, true, true);
sp.graphics.drawRect(0, 0, BitmapTexture.w, BitmapTexture.h);
sp.graphics.endFill();
BitmapTexture.sp = sp;
}
private static function addStage():void {
if (BitmapTexture.scope.numChildren) {
cleaner.deleteContainer(BitmapTexture.scope, 0, null);
}
BitmapTexture.scope.addChildAt(BitmapTexture.sp, 0);
}
}
}

サンプルソースコード】

Sample.as


package {
import flash.display.MovieClip;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import jp.atziluth.gui.BitmapTexture;
public class Sample extends MovieClip {
private const TEXTURE:_container=new _container();
private const MODE_LOAD:String = "1";
private const MODE_DRAW:String = "2";
private var BitmapTextureMode:String = MODE_LOAD;
public function Sample():void {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
this.addChildAt(TEXTURE, 0);
switch (BitmapTextureMode) {
case MODE_LOAD :
//リンケージクラス: _BitmapTexture (PNGファイル) の読み込み
BitmapTexture.load(TEXTURE);
break;
case MODE_DRAW :
//1px間隔でドットテクスチャを描画
BitmapTexture.draw(TEXTURE);
break;
}
}
}
}

Download