Hey,
ich würde gerne per Webcam Bilder erstellen und diese via PHP auf dem Server speichern. Das funktioniert bisher auch alles, allerdings tritt beim Bild erstellen ein Fehler:
Als Webcambild wird das Bild in voller größe angezeigt und beim Klick auf Bild machen (buttonPreview) wird das Bild gemacht und im Loader angezeigt aber im Loader ist das Bild dann nur noch ca. 1/4 des Webcambildes. Und der Rest des Bildes ist weiß (bzw. die Füllfarbe die eingestellt ist). Das wäre ja jetzt nicht umbedingt so schlimm zwar auch doof aber aktzeptabel. Wenn ich das Bild jetzt aber an eine PHP Datei weiterleite zum speichern wird das Bild dann aber eben (logischerweiße) so gespeichert wie es auch im Loader zu sehen ist. Woran kann das liegen das das Bild falsch gemacht wird und nicht in voller Größe?
Hier der Code:
Code:
import flash.net.NetStream;
import flash.events.NetStatusEvent;
import flash.utils.ByteArray;
import encoding.JPEGEncoder;
import flash.display.Loader;
var cam:Camera = Camera.getCamera();
// ::::: Video ::::::
if(cam != null){
var myVideo:Video = outputcam;
cam.setMode(350,300,30);
myVideo.attachCamera(cam);
}
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
var customClient:Object = new Object();
ns.client = customClient;
ns.addEventListener(NetStatusEvent.NET_STATUS, statusmeldungen);
function statusmeldungen(meldungen:Object)
{
// Loop
if (meldungen.info.code == "NetStream.Play.Stop") {
ns.seek(0);
ns.resume();
}
};
// :::: Loader --> Anzeigen des JPEGs :::::
var vorschau:Loader = new Loader();
vorschau.x = 0;
// :::: JPG erstellen :::::
var myJPEGData:ByteArray;
function createJPEG ( evt:MouseEvent ):void
{
// neues Bitmap-Objekt
var myBmd:BitmapData = new BitmapData (myVideo.width,myVideo.height);
// Bitmap vom Video erstellen
myBmd.draw (myVideo);
// neues JPEP-Objekt (Angabe in Klasmmern ist die Qualitaet)
var myEnc:JPEGEncoder = new JPEGEncoder(100);
// neues ByteArray (binäre Daten)
myJPEGData = myEnc.encode (myBmd);
// loadBytes() lädt binäre Daten aus einem ByteArray
vorschau.loadBytes (myJPEGData);
// vorschau auf der Bühne platzieren
addChild (vorschau);
// Save-Button anzeigen
buttonPreview.visible = false;
buttonsave.visible = true;
buttonnew.visible = true;
}
buttonPreview.addEventListener (MouseEvent.MOUSE_UP, createJPEG);
buttonsave.addEventListener (MouseEvent.MOUSE_UP, save);
buttonsave.visible = false;
buttonnew.addEventListener (MouseEvent.MOUSE_UP, newpic);
buttonnew.visible = false;
// neuer URLLoader zum Senden der Daten an den Server
var myURLLoader:URLLoader = new URLLoader();
myURLLoader.addEventListener ( Event.COMPLETE, onImageSent )
function newpic(evt:MouseEvent) {
buttonsave.visible = false;
buttonnew.visible = false;
buttonPreview.visible = true;
removeChild(vorschau);
}
function save(evt:MouseEvent) {
// neue URL-Anfrage festlegen
var myRequest:URLRequest = new URLRequest ("Neues%20Avatar?action=upload");
// Content-type (application/octet-stream) header festlegen und hinzufügen
var header:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
myRequest.requestHeaders.push (header);
// über POST versenden
myRequest.method = URLRequestMethod.POST;
// JPEG-Daten mit der URL-Anfrage verknüpfen
myRequest.data = myJPEGData;
// URLLoader mit der URL-Anfrage verknüpfen und danach laden
myURLLoader.load (myRequest);
navigateToURL (myRequest, "_self");
}
function onImageSent ( evt:Event ):void
{
var loader:URLLoader = URLLoader (evt.target);
var myVars:URLVariables = new URLVariables (loader.data);
tf.text = "http://www.meinserver.de/" + myVars.result;
} Vielen Dank für eure Hilfe