PDA

Просмотр полной версии : Как сохранить Bitmap на сервере через JPGEncoder


mr.tsb
25.04.2009, 12:26
Делаю скриншонт с камеры и хочу сохранить его на сервер в формате jpg.
Делаю так:


Urequest = new URLRequest("http://www.mysite.ru/upload.php");

var imgcontainer:BitmapData = new BitmapData(320,240);
var image:Bitmap = new Bitmap(imgcontainer);
var scaleMatrix:Matrix = new Matrix()

scaleMatrix.scale(2,2)
imgcontainer.draw(MyCamScreenshot,scaleMatrix);
var jpg:JPGEncoder = new JPGEncoder(100);
var ba:ByteArray = jpg.encode(image);

var file:FileReference = FileReference(ba);
file.upload(uploadURL);


компилятор ругается:

1067: Implicit coercion of a value of type flash.display:Bitmap to an unrelated type flash.display:BitmapData.
или, если я передаю image в FileReference:
Type Coercion failed: cannot convert flash.display::Bitmap@1eebc9d1 to flash.net.FileReference.

Пожалуйста, подскажите, что я делаю нетак?

VVall
25.04.2009, 12:43
Вы не пытаетесь понять сообщения об ошибках или хотя-бы почитать документацию.

mr.tsb
25.04.2009, 17:38
Прошу прощения за нарушение вашего эстетического вкуса, просто очень спешу :-(

Переиначу вопрос:

Как тип Bitmap изменить в тип BitmapData требуемый JPGEncoder'ом ?
И съест ли FileReference этот тип?

VVall
26.04.2009, 04:51
Ответ переиначивать не требуется: читайте документацию, там всё написано. Как вы хотите сделать что-то, не изучив это? Почему вы считаете, что ваша спешка является оправданием, чтобы другие люди тратили своё время на пересказ вам элементарных вещей из документации?

Для начала http://livedocs.adobe.com/flex/3/langref/flash/display/Bitmap.html

mr.tsb
27.04.2009, 21:09
Спасибо, хорошо, я чуть разобрался с тем, что наворотил.

MyCamScreenshot.attachCamera(cam); // компонент video
...
var url = "http://www.mysite.ru/upload.php";
var scaleMatrix:Matrix = new Matrix();
scaleMatrix.scale(2,2);

/////////
var myBitmapData:BitmapData = new BitmapData(320,240);
myBitmapData.draw(MyCamScreenshot,scaleMatrix);
var bmp:Bitmap = new Bitmap(myBitmapData);
addChild(bmp);
/////////

var jpg:JPGEncoder = new JPGEncoder(100);
var ba:ByteArray = jpg.encode(myBitmapData);


как теперь "ba" залить на сервер?
P.S. у меня FP9...

Добавлено через 27 минут
Пытаюсь отправить через следующую конструкцию:

var request:URLRequest = new URLRequest(url);

var variables:URLVariables = new URLVariables();
variables.ddd = ba.toString();

request.data = variables;
request.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, qwer);
loader.load(request);


Всё в порядке, запрос приходит на сервер, но в jpg файл сваливаются только пару байт...

Zall
29.04.2009, 12:42
variables.ddd = ba.toString(); - попробуй без этого.

Добавлено через 38 секунд
variables.ddd = ba или типо того

mr.tsb
29.04.2009, 13:00
Всем спасибо!
нашел работающий способ здесь:
http://easyflash.org/256-soxranyaem-kartinku-iz-flash-posredstvom.html

Da_Demon
20.04.2010, 14:21
У этого примера есть проблема - JPG он делает уже на сервере.
Думаю тема не раскрыта JPGEncoder нужен для того что-бы слать уже готовый маленький файл, а не здоровенную myBitmapData.getPixel(a,b).toString(16); и так для каждого пикселя.
Демонстрацию отправки и сохранения результата JPGEncoder все еще найти не могу.