Citat:
gordon_beneth:
...Inače uz pomoć php-a bi to moglo da se napravi dosta preciznije, ali samo ako je u pitanju snapshot slike, snapshot npr scene iz igre je mislim nemoguć, barem u AS 2
Moram da demantujem samog sebe :-)
Postoji način da se napravi "pravi" snapshot, mada je pitanje koliko je to upotrebljivo u realnim uslovima.
Da ne dužim, evo koda (AS 2)
Code:
import flash.display.BitmapData;
sw = Stage.width;
sh = Stage.height;
var bmp:BitmapData = new BitmapData(sw, sh);
var lv:LoadVars = new LoadVars();
lv.sw = sw;
lv.sh = sh;
_root.onMouseDown = function() {
bmp.draw(_root);
for (i=0; i<sw; i++) {
for (j=0; j<sh; j++) {
color = bmp.getPixel(i, j).toString(16);
lv[i+"_"+j] = color;
}
}
lv.send("snp.php", "_blank", "POST");
};
Dakle snapshot se pravi u BitmapData objektu, ali pošto se takav objekat ne može poslati, "razlaže" se na piksele, i informacije o svakom pikselu (u stvari samo boja), sa ubacuju u LoadVars objekat, a zatim šalju snp.php fajlu, koji na osnovu tih informacijama kreira sliku. Lako je zaključiti da kod prilično opterećuje mašinu, za iole veći Stage, ali još veći je problem uploudovanja velike količine informacija na server, tako da je praktična primena prilično ograničena, tako da, ako budete isprobavali, probajte na manjem Stageu, ili prepravite kod tako da ne "hvata" ceo stage.
Da ne zaboravim, evo i php skripte
Code:
<?
header("Content-type: image/jpeg");
$width=$_POST['sw'];
$height=$_POST['sh'];
$im = @imagecreatetruecolor($width, $height)or die("Cannot Initialize new GD image stream");
for($i=0;$i<$width;$i++){
for($j=0;$j<$height;$j++){
$rgb=html2rgb('#'.$_POST[$i.'_'.$j]);
$color= imagecolorallocate($im, $rgb[0],$rgb[1], $rgb[2]);
imagesetpixel ($im, $i+1, $j+1, $color);
}
}
imagejpeg($im);
function html2rgb($color)
{
if ($color[0] == '#')
$color = substr($color, 1);
if (strlen($color) == 6)
list($r, $g, $b) = array($color[0].$color[1],
$color[2].$color[3],
$color[4].$color[5]);
elseif (strlen($color) == 3)
list($r, $g, $b) = array($color[0], $color[1], $color[2]);
else
return false;
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
return array($r, $g, $b);
}
?>
Pretpostavljam da može i bolje da se napiše, ali to ostavljam nekom drugom (McKracken ??? :-)
/(bb|[^b]{2})/