Flex: экспорт графика в .NET? - PullRequest
2 голосов
/ 19 марта 2009

У меня есть компонент графика во Flex, и мой конечный пользователь хочет иметь возможность манипулировать этим элементом управления во Flex, а затем экспортировать результат в Powerpoint. У меня нет проблем с экспортом изображения в Powerpoint, но я сталкиваюсь с проблемой при экспорте компонента Flex в веб-службу .NET. Вот код, который я придумал ...

Декларация веб-службы:

<mx:WebService id="ws" wsdl="http://localhost:59228/CreateImageService.asmx?wsdl">
<mx:operation name="CreateImage" resultFormat="xml"/>
</mx:WebService>

Код Flex:

    private function btnCreateImage():void {
    var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(TeamChart);
    var imageByteArray:ByteArray = imageSnap.data as ByteArray;

    ws.CreateImage(imageByteArray);

    //swfLoader.load(imageByteArray);

}

И код веб-службы:

    [WebMethod]
    public void CreateImage(byte byteArrayin)
    {
        CreateImage createImage = new CreateImage();
        createImage.byteArrayToImage(byteArrayin);
    }

Я знаю, что компонент успешно конвертируется в ByteArray, потому что я могу использовать SWFLoader (), чтобы он снова появился на холсте Flash. Если я пытаюсь отправить байтовый массив в веб-службу .NET, я получаю ошибку SOAP. Если я отправлю 0 в веб-службу, это как минимум ударит по веб-службе.

Я не совсем уверен, где проблема, но я боюсь, что это что-то простое, что я упускаю из виду.

Очень ценится,

Матф

1 Ответ

2 голосов
/ 19 марта 2009

Я понял это. Мне пришлось закодировать изображение в виде строки base64 и отправить его в .NET таким образом. Вот мой код:

Flex:

private function btnCreateImage():void {
    var imageSnap:ImageSnapshot = ImageSnapshot.captureImage(TeamChart);
    var image64BitText:String = ImageSnapshot.encodeImageAsBase64(imageSnap);

    ws.CreateImage(image64BitText);

    //swfLoader.load(imageByteArray);

}

.NET Web Service

public Image byteArrayToImage(string base64ImageString)
{
    // Convert Base64 String to byte[]
    byte[] imageBytes = Convert.FromBase64String(base64ImageString);
    MemoryStream ms = new MemoryStream(imageBytes, 0,
      imageBytes.Length);

    // Convert byte[] to Image
    ms.Write(imageBytes, 0, imageBytes.Length);
    Image image = Image.FromStream(ms, true);
    return image;
}
...