2012-06-05 2 views
1

Так мне удалось просмотреть веб-камеру в AS3 приложение с этим кодом:сфотографировать текущего изображения с веб-камеры в флэш-AS3

package{ 
    import flash.display.Sprite; 
    import flash.media.Camera; 
    import flash.media.Video; 

    public class WebCam extends Sprite 
    { 
     private var camara:Camera; 
     private var video:Video; 

     public function WebCam():void { 
      setupCamera(); 
     } 

     private function setupCamera():void 
     { 
      video = new Video(640, 480); 
      camara = Camera.getCamera(); 
      camara.setMode(640, 480, 30); 
      video.attachCamera(camara); 
      addChild(video); 
     } 

    } 

} 

Но я задаюсь вопросом, если есть в любом случае, чтобы взять изображение текущего изображения с веб-камеры и сохранить его где-нибудь локально?

EDIT:

@Sean Вот мой текущий код:

var camara; 
var video; 


//Get the camera reference. 
camara = Camera.getCamera(); 


//Create a video instance 
video = new Video(640, 480); 


video.attachCamera(camara); 

addChild(video); 

var bitmapData:BitmapData = new BitmapData(640, 480); 
bitmapData.draw(video); 

var encoder:JPGEncoder = new JPGEncoder(); 
var byteArray:ByteArray = encoder.encode(bitmapData); 

navnavClick.addEventListener(MouseEvent.CLICK,function(){ 
var fileReference:FileReference = new FileReference(); 
fileReference.save(byteArray); 
}); 

Это все работает хорошо, но вывод изображения просто пустой (белый) изображение. Я также включил класс JPGEncoder. Есть идеи?

ответ

1

Во-первых, вы должны нарисовать изображение до BitmapData.

var bitmapData:BitmapData = new BitmapData(640, 480); 
bitmapData.draw(video); 

Затем необходимо закодировать BitmapData. Я бы порекомендовал кодировщик, который использует Alchemy, но Adobe удаляет это из Flash Player. Таким образом, вы должны использовать медленнее as3corelib JPGEncoder.

var encoder:JPGEncoder = new JPGEncoder(); 
var byteArray:ByteArray = encoder.encode(bitmapData); 

Теперь у вас есть необработанные байты файла изображения и можно записать их на диск.

var fileReference:FileReference = new FileReference(); 
fileReference.save(byteArray); 

(Эта часть должна быть вызвана из инициированного пользователем действия, как щелчок).

+0

Это выглядит довольно удивительным Шон. Вы говорите: «Эта часть должна быть вызвана из инициированного пользователем действия», какая часть? «Var fileReference: FileReference = new FileReference(); fileReference.save (byteArray); 'part? –

+0

Правильно, это функция безопасности. Вспышка не позволит вам открыть диалог «Сохранить как ...» без нажатия пользователем или нажатия клавиши. –

+0

Ненавижу продолжать прослушивать вас, но, похоже, он сохраняет пустой файл jpeg. Размер файла кажется правильным, но нет изображения, просто пустое изображение ... Я отредактирую свой вопрос с помощью текущего кода. Спасибо xD –

0

Ну, попробуйте этот код, я использую его, и он прекрасно работает:

var cam:Camera = Camera.getCamera(); 
cam.setMode(stage.stageWidth,stage.stageHeight,30); 
var video_es = new Video(cam.width, cam.height); 
video_es.attachCamera(cam); 
stage.addEventListener(MouseEvent.CLICK, snapIt); 
var screenS:BitmapData = new BitmapData(cam.width, cam.height); 
addChild(video_es); 

function snapIt(e:MouseEvent):void { 
    screenS.draw(video_es) ; 

    var jpgEncoder:JPGEncoder = new JPGEncoder(); 
    var byteArray:ByteArray = jpgEncoder.encode(screenS); 

    var fileReference:FileReference=new FileReference(); 
    fileReference.save(byteArray, "test1.jpg"); 

} 

Надежда, что помогает

Смежные вопросы