Apollo, Silverlight and JavaFX終於要掀起一場RIA革命了~
下半年之後就看各自的策略如何攻城掠地~
行銷、廣告以及書籍的質與量等…是戰場之一;開發效率、可維護性、可移植性等…這又取決於本身的產品特質~
不過就以「可移植性」這方面來說的話,我想應該比較少人會選擇Silverlight,而投向Apollo或JavaFX的懷抱,然而這兩者的取向又有點不一樣~ 不曉得會不會演變成「鷸蚌相爭,漁翁得利」的情況~
blog.Ring.idv.tw
Apollo, Silverlight and JavaFX終於要掀起一場RIA革命了~
下半年之後就看各自的策略如何攻城掠地~
行銷、廣告以及書籍的質與量等…是戰場之一;開發效率、可維護性、可移植性等…這又取決於本身的產品特質~
不過就以「可移植性」這方面來說的話,我想應該比較少人會選擇Silverlight,而投向Apollo或JavaFX的懷抱,然而這兩者的取向又有點不一樣~ 不曉得會不會演變成「鷸蚌相爭,漁翁得利」的情況~
2007-05-08 22:32:37 | Add Comment
In General
切换成「简体中文」:
,,C
也就是可以依照简体字的写法、呒虾米的拆法来输入中文字。
切换成「台式打法」:
,,CT
这样就可以用繁体字的写法,来打出简体字罗~
若要切换回繁体输入:
,,T
便可以再切換回繁體輸入法囉~
2007-05-07 23:51:48 | Add Comment
In Flash, ActionScript
可用來將影像模糊化~ Try it!
Blur
import flash.display.BitmapData;
function Blur():Void
{
var myBitmapData:BitmapData = BitmapData.loadBitmap("brg");
var height:Number = myBitmapData.height;
var width:Number = myBitmapData.width;
var gray:Array = new Array(width);
for(var i:Number = 0 ; i < width ; i++)
gray[i] = new Array(height);
var gray2:Array = new Array(width);
for(var i:Number = 0 ; i < width ; i++)
gray2[i] = new Array(height);
//RGB to GRAY
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
var rgb:Number = myBitmapData.getPixel(i,j);
var r:Number = 0xFF&(rgb >> 16);
var g:Number = 0xFF&(rgb >> 8);
var b:Number = 0xFF&rgb;
gray[i][j]= 0.299*r + 0.587*g +0.114*b;
}
}
for(var x = 1; x < width-1;x++)
{
for(var y = 1; y < height-1;y++)
{
/**
00(a) 10(b) 20(c)
01(d) 11(*) 21(e)
02(f) 12(g) 22(h)
*/
var a = gray[x-1][y-1]*0.1;
var b = gray[x][y-1]*0.1;
var c = gray[x+1][y-1]*0.1;
var d = gray[x-1][y]*0.1;
var e = gray[x][y]*0.1;
var f = gray[x+1][y]*0.1;
var g = gray[x-1][y+1]*0.1;
var h = gray[x][y+1]*0.1;
var i = gray[x+1][y+1]*0.1;
var gc = (a+b+c+d+e+f+g+h+i);
gray2[x][y] = 0xff000000 |gc<<16 | gc<<8 | gc;
}
}
//set pixel value
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
myBitmapData.setPixel(i,j,gray2[i][j]);
}
}
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc.attachBitmap(myBitmapData,this.getNextHighestDepth());
}
Blur();
2007-05-07 00:09:35 | Add Comment
In Flash, ActionScript
這是常見影像處理中的Sobel邊緣偵測法~ 有興趣的人不妨玩玩哦~
相關的演算法細節~ 請參閱Google大神中的Sobel影像處理一節~
Sobel
import flash.display.BitmapData;
function Sobel():Void
{
var myBitmapData:BitmapData = BitmapData.loadBitmap("bear");
var height:Number = myBitmapData.height;
var width:Number = myBitmapData.width;
var gray:Array = new Array(width);
for(var i:Number = 0 ; i < width ; i++)
gray[i] = new Array(height);
var gray2:Array = new Array(width);
for(var i:Number = 0 ; i < width ; i++)
gray2[i] = new Array(height);
var sobscale = 1.0;
var offsetval = 0;
// RGB to GRAY
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
var rgb:Number = myBitmapData.getPixel(i,j);
var r:Number = 0xFF&(rgb >> 16);
var g:Number = 0xFF&(rgb >> 8);
var b:Number = 0xFF&rgb;
gray[i][j]= 0.299*r + 0.587*g +0.114*b;
}
}
for(var x = 1; x < width-1;x++)
{
for(var y = 1; y < height-1;y++)
{
/**
00(a) 10(b) 20(c)
01(d) 11(*) 21(e)
02(f) 12(g) 22(h)
*/
var a = gray[x-1][y-1];
var b = gray[x][y-1];
var c = gray[x+1][y-1];
var d = gray[x-1][y];
var e = gray[x+1][y];
var f = gray[x-1][y+1];
var g = gray[x][y+1];
var h = gray[x+1][y+1];
var hor = (a+d+f) - (c+e+h);
if(hor < 0)
hor = -hor;
var vert = (a+b+c) - (f+g+h);
if(vert < 0)
vert = -vert;
var gc = (sobscale * (hor + vert));
gc = (gc + offsetval);
if (gc > 255)
gc = 255;
gray2[x][y] = 0xff000000 |gc<<16 | gc<<8 | gc;
}
}
//set pixel value
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
myBitmapData.setPixel(i,j,gray2[i][j]);
}
}
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc.attachBitmap(myBitmapData,this.getNextHighestDepth());
}
Sobel();
2007-05-06 23:35:59 | Comments (5)
In Flash, ActionScript
這是之前修課時寫的一個「馬賽克」影像程式~ 不過那時AS3尚未問世~ 我想用AS3重新寫過的話~ 處理速度應該會增進不少~ 留待以後再做試驗~
Mosaic
import flash.display.BitmapData;
function setImage(para:Number):Void
{
var myBitmapData:BitmapData = BitmapData.loadBitmap("lena");
var height:Number = myBitmapData.height;
var width:Number = myBitmapData.width;
//declare a two-dimensional array
var rgb:Array = new Array(width);
for(var j:Number = 0 ; j < height ; j++)
rgb[j] = new Array(height);
//get pixel value to rgb array
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
rgb[i][j] = myBitmapData.getPixel(i,j);
}
}
var checkedsize = (para < 1) ? 1 : para;
//get index pixel value to temp array
var temp:Array = new Array();
for(var i:Number = 0 ; i < width ; i+=checkedsize)
{
for(var j:Number = 0 ; j < height ; j++)
{
if(i % checkedsize == 0 && j % checkedsize == 0)
{
temp[temp.length] = rgb[i][j];
}
}
}
//set index pixel value to rgb array
var tmp:Number = 0;
for(var i:Number = 0 ; i < width ; i+=checkedsize)
{
for(var j:Number = 0 ; j < height ; j++)
{
if(i % checkedsize == 0 && j % checkedsize == 0)
{
for(var m:Number = 0 ; m < checkedsize ; m++)
{
for(var n:Number = 0 ; n < checkedsize ; n++)
{
rgb[i+m][j+n]=temp[tmp];
}
}
tmp++;
}
}
}
//set pixel value
for(var i:Number = 0 ; i < width ; i++)
{
for(var j:Number = 0 ; j < height ; j++)
{
myBitmapData.setPixel(i,j,rgb[i][j]);
}
}
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
mc.attachBitmap(myBitmapData,this.getNextHighestDepth());
}
setImage(20);
2007-05-06 23:21:39 | Add Comment