我正在使用位圖數據api來允許用戶使用其攝像頭捕獲圖像,編輯並將其保存到其硬盤。位圖數據api,從轉換後的精靈中提取
我已經成功設法使用變換矩陣來裁剪位圖數據,但問題在於應用於捕獲圖像的任何變換(使用Senocular的變換工具)並未反映在保存的圖像中。這顯然是與.draw命令有關的,但我對此感到不知所措?
如何獲取位圖數據.draw以反映應用於捕獲圖像的縮放和旋轉變換?
您可以查看應用程序:http://s46264.gridserver.com/dev/dave/pb-photo/index.html (只需點擊所拍攝的圖像,使縮放/旋轉工具) 和源/班在拉上:http://s46264.gridserver.com/dev/dave/pb-photo/pb-photo.zip
任何澄清,將不勝感激。
感謝
代碼是:
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.geom.Matrix;
import flash.net.FileReference;
import com.adobe.images.JPGEncoder;
import com.senocular.display.transform.*;
// create container for captured image to apply Transform Tool to
var box:Sprite = new Sprite();
addChild(box);
box.graphics.beginFill(0xAACCDD);
box.graphics.drawRect(-160, -120, 320, 240); // xreg, yreg, width, height (x-y = width-height/2 to set centered registration point)
box.x = 520;
box.y = 140;
// create the Transform Tool
var tool:TransformTool = new TransformTool(new ControlSetStandard());
addChild(tool);
// select the box with the transform tool when clicked.
// deselect when clicking on the stage
box.addEventListener(MouseEvent.MOUSE_DOWN, tool.select);
stage.addEventListener(MouseEvent.MOUSE_DOWN, tool.deselect);
var snd:Sound = new camerasound(); //new sound instance for the "capture" button click
var bandwidth:int = 0; // Maximum amount of bandwidth that the current outgoing video feed can use, in bytes per second.
var quality:int = 100; // This value is 0-100 with 1 being the lowest quality.
var cam:Camera = Camera.getCamera();
cam.setQuality(bandwidth, quality);
cam.setMode(320,240,30,false); // setMode(videoWidth, videoHeight, video fps, favor area)
var video:Video = new Video();
video.attachCamera(cam);
video.x = 20;
video.y = 20;
addChild(video);
var bitmapData:BitmapData = new BitmapData(video.width,video.height);
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.x = -160;
bitmap.y = -120;
box.addChild(bitmap);
capture_mc.buttonMode = true;
capture_mc.addEventListener(MouseEvent.CLICK,captureImage);
function captureImage(e:MouseEvent):void {
snd.play();
bitmapData.draw(video);
save_mc.buttonMode = true;
save_mc.addEventListener(MouseEvent.CLICK, onSaveJPG);
save_mc.alpha = 1;
}
save_mc.alpha = .5;
var crop:Matrix = new Matrix();
crop.createBox(1, 1, 0, box.x-crop_mc.x, box.y-crop_mc.y);
function onSaveJPG(e:Event):void{
var bmp:BitmapData = new BitmapData(crop_mc.width, crop_mc.height, true);
bmp.draw(box, crop);
var encoder:JPGEncoder = new JPGEncoder(100);
// Save the encoded byte array to a local file.
var f:FileReference = new FileReference();
f.save(encoder.encode(bmp), "imagem.jpg");
}
謝謝,這有很大的幫助。與由變換工具設置的註冊點有一些問題,但現在正在從已變換的對象中繪製。 – digitalpencil