2016-02-08 2 views
0

Я знаю, что это старый вопрос, но у меня есть проблемы с кодирующей byte[] в растровое изображение ...байт [], чтобы изображение с помощью Xamarin.Android

Справочной информации: Я пишу Andoid- Приложение, которое получает picturebytes via UDP, кодирует их в растровое изображение и отображает изображение в image view.

Поскольку мои функции не работали, я отменил UDP-Connection для тестирования и написал все image-bytes в огромной переменной. Итак, все они правильны ... Функция возвращает «null». Функция Я использую:

public Bitmap ByteArrayToImage(byte[] imageData) 
    { 
     var bmpOutput = BitmapFactory.DecodeByteArray(imageData, 0, imageData.Length); 
     return bmpOutput; 
    } 

другая функция, которую я опробовал:

public Bitmap ByteArrayToImage2(byte[] imageData) 
    { 
     Bitmap bmpReturn; 
     bmpReturn = (Android.Graphics.Bitmap) Android.Graphics.Bitmap.FromArray<byte>(imageData); 
     return bmpReturn; 
    } 

Функция я нашел в интернете:

public static Bitmap bytesToUIImage (byte[] bytes) 
{ 
    if (bytes == null) 
     return null; 

    Bitmap bitmap; 


    var documentsFolder = Environment.GetFolderPath (Environment.SpecialFolder.Personal); 

    //Create a folder for the images if not exists 
    System.IO.Directory.CreateDirectory(System.IO.Path.Combine (documentsFolder, "images")); 

    string imatge = System.IO.Path.Combine (documents, "images", "image.jpg"); 


    System.IO.File.WriteAllBytes(imatge, bytes.Concat(new Byte[]{(byte)0xD9}).ToArray()); 

    bitmap = BitmapFactory.DecodeFile(imatge); 

    return bitmap; 
} 

Большинство, к сожалению, последняя функция Didn «Я тоже работаю, но здесь я действительно признаюсь, что я немного смутился по поводу« документов »в string imatge = System.IO.Path.Combine (documents, "images", "image.jpg"); I g Ot ошибка и изменил его в documentsFolder, так как я предполагаю, что должно (или может) быть право ....

Заранее спасибо за помощь

ответ

1

похоже, я нашел ошибку ... Я сохранил public Bitmap ByteArrayToImage(byte[] imageData) в другом классе. Я не знаю, почему, но когда я расшифровываю Bytearray в классе, который также получает массив, все работает отлично ... Если кто-то знает причину, не стесняйтесь, дайте мне знать, но пока я счастлив; -)

0

я сделал что-то подобное

На стороне отправителя :

Camera.Parameters parameters = camera.getParameters(); 

       if (parameters.getPreviewFormat() == ImageFormat.NV21) { 
        Rect rect = new Rect(0, 0, parameters.getPreviewSize().width, parameters.getPreviewSize().height); 
        YuvImage yuvimage = new YuvImage(data, ImageFormat.NV21, parameters.getPreviewSize().width, parameters.getPreviewSize().height, null); 

        ByteArrayOutputStream os = new ByteArrayOutputStream(); 
        yuvimage.compressToJpeg(rect, 75, os); 
        byte[] videoFrame = os.toByteArray(); 
        //send the video frame to reciever 
       } 

На принимающей стороне:

DataInputStream dIn = new DataInputStream(socket.getInputStream()); 
       int length = 0; 
       length = dIn.readInt(); 
       if (length > 0) { 
        byte[] message = new byte[length]; 
        dIn.readFully(message, 0, message.length); 
        BitmapFactory.Options options = new BitmapFactory.Options(); 
        options.inSampleSize = 4; 
        final Bitmap bitmap = BitmapFactory.decodeByteArray(message, 0, message.length, options); 
        ReceiverActivity.this.runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          imgPreview.setImageBitmap(bitmap); 
         } 
        }); 
0

Eсть встроенный метод для декодирования массива байтов в растровое изображение. Проблема возникает, когда мы говорим о больших изображениях. С малыми вы можете использовать:

Bitmap bmp = BitmapFactory.DecodeByteArray (data, 0, data.length); 

Знайте. Эти растровые изображения не изменяются, поэтому вы не сможете использовать холсты для них. Чтобы сделать их изменчивыми, перейдите по ссылке: BitmapFactory.decodeResource returns a mutable Bitmap in Android 2.2 and an immutable Bitmap in Android 1.6

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