Silverlight - передача изображения WritableBitmap в COM и преобразование в растровое изображение - PullRequest
0 голосов
/ 06 декабря 2011

Нужна помощь в передаче изображения из Silverlight4 на COM.

Я пытаюсь передать ByteArray из WritableBitmap и преобразовать его обратно в Bitmap.

//In silverlight 4:
public string func1()
{
    WriteableBitmap bitmap = new WriteableBitmap((BitmapSource)imgTempCropped.Source);
    byte[] imgbytes = ToByteArray(bitmap);
    dynamic comClass = AutomationFactory.CreateObject("OCRLibrary.OCRClass");
    ocrText = comClass.Process(imgbytes);
}

//In COM:
public string Process(byte []imgbytes)
{
    Stream input = new MemoryStream(imgbytes);

    try{
        Bitmap bitmap1 = new Bitmap(input);
    }catch(Exception e)
    {
        return e.Message;
    }   
}

// Сообщение об ошибке: Параметр недействителен.

Я даже пытался передать Base64String, но выдается то же сообщение об ошибке: (

Ответы [ 3 ]

0 голосов
/ 06 декабря 2011
check it 

public string func1()
{
    WriteableBitmap bitmap = new WriteableBitmap((BitmapSource)imgTempCropped.Source);
    byte[] imgbytes = ToByteArray(bitmap);
    dynamic comClass = AutomationFactory.CreateObject("OCRLibrary.OCRClass");
    ocrText = comClass.Process(imgbytes);
}

//In COM:
public string Process(byte []imgbytes)
{
    Stream input = new MemoryStream(imgbytes);
    input.Write(arr, 0, arr.Length);
    input.Close();
    try{
        Bitmap bitmap1 = new Bitmap(input);
    }catch(Exception e)
    {
        return e.Message;
    }   
}
0 голосов
/ 07 декабря 2011

Наконец-то все заработало ... передача растрового изображения из Silverlight в Silverlight COM Wrapper.

    //In Silverlight:

dynamic comClass = AutomationFactory.CreateObject("OCRLibrary.OCRClass");
WriteableBitmap bitmap = new WriteableBitmap((BitmapSource)imgTempCropped.Source);
byte[] imgbytes = ToByteArrayOptimized(bitmap);                                     
ocrText = comClass.Process(imgbytes);


//Found this for ImageTools: ImageTools.IO.Jpeg.JpegEncode
//using ImageTools;
//using ImageTools.Helpers;
//using ImageTools.IO;
//using ImageTools.IO.Bmp;
//using ImageTools.IO.Png;
//using ImageTools.IO.Jpeg;
//I have yet to remove couple of using from here since I added all to test the code ;)

    #region To byte array (optimized)

    /// <summary>
    /// Synchronously converts a bitmap to a byte array.
    /// The used format can be JPEG or PNG, depending on which one
    /// results in a smaller file size.
    /// </summary>
    /// <param name="bitmap">The bitmap to encode.</param>
    /// <returns>The encoded image either in PNG or JPEG format.</returns>
    public byte[] ToByteArrayOptimized(WriteableBitmap bitmap)
    {
        ExtendedImage image = bitmap.ToImage();

        // encode to jpeg
        MemoryStream jpegStream = new MemoryStream();
        _jpegEncoder.Encode(image, jpegStream);

        // encode to png
      //  MemoryStream pngStream = new MemoryStream();
      //  _pngEncoder.Encode(image, pngStream);

        // decide which one we should use
       // MemoryStream formatToUse = jpegStream.Length < pngStream.Length ? jpegStream : pngStream;
        MemoryStream formatToUse = jpegStream;
        byte[] result = formatToUse.ToArray();

        // done
        return result;
    }

    //In COM:
    [ComVisible(true)]  
    //public string Process(string base64string )
    public string Process(byte[] imgbytes)
    {
        MemoryStream mystream = new MemoryStream(imgbytes);
        System.Drawing.Image p = System.Drawing.Image.FromStream(mystream);
        Bitmap Img = new Bitmap(p);        // :) I got Bitmap here.    

    }

http://www.pitorque.de/MisterGoodcat/post/Improving-the-image-upload-sample.aspx

0 голосов
/ 06 декабря 2011

что такое COM ???

private void SaveToIsolatedStorage(Stream imageStream, string fileName, byte[] arr)
        {



            try
            {

                using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    if (myIsolatedStorage.FileExists(fileName))
                    {
                        myIsolatedStorage.DeleteFile(fileName);
                    }
                    myIsolatedStorage.CreateDirectory("Album");
                    IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(fileName);
                    fileStream.Write(arr, 0, arr.Length);
                    fileStream.Close();
                    return;
                    BitmapImage bitmap = new BitmapImage();
                    bitmap.SetSource(imageStream);

                    WriteableBitmap wb = new WriteableBitmap(bitmap);
                    wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
                    fileStream.Close();

                }
            }
            catch (Exception ex) { }

        }

и

Stream uc = new MemoryStream(img);


                SaveToIsolatedStorage(uc, tempJPEG, img);
...