Xamarin - Convert image to byte array

后端 未结 1 395
慢半拍i
慢半拍i 2020-12-11 11:01

I use a media plugin to take or pick a photo from either an Android device or iOS device. I then want to tweet that image using LINQtoTwitter. In order to do that the image

相关标签:
1条回答
  • 2020-12-11 11:54

    Image can not be converted to byte array , stream will be

    image.Source = ImageSource.FromStream(() =>
                {
                      var stream = file.GetStream();
                      file.Dispose();
                      byte[] imgByteArray = ConvertStreamToByteArray(imgStream);
                      return stream;
                });
    

    ConvertStreamToByteArray Method

    public byte[] ConvertStreamToByteArray (System.IO.Stream stream)
            {
                long originalPosition = 0;
    
                if (stream.CanSeek)
                {
                    originalPosition = stream.Position;
                    stream.Position = 0;
                }
    
                try
                {
                    byte[] readBuffer = new byte[4096];
    
                    int totalBytesRead = 0;
                    int bytesRead;
    
                    while ((bytesRead = stream.Read(readBuffer, totalBytesRead, readBuffer.Length - totalBytesRead)) > 0)
                    {
                        totalBytesRead += bytesRead;
    
                        if (totalBytesRead == readBuffer.Length)
                        {
                            int nextByte = stream.ReadByte();
                            if (nextByte != -1)
                            {
                                byte[] temp = new byte[readBuffer.Length * 2];
                                Buffer.BlockCopy(readBuffer, 0, temp, 0, readBuffer.Length);
                                Buffer.SetByte(temp, totalBytesRead, (byte)nextByte);
                                readBuffer = temp;
                                totalBytesRead++;
                            }
                        }
                    }
    
                    byte[] buffer = readBuffer;
                    if (readBuffer.Length != totalBytesRead)
                    {
                        buffer = new byte[totalBytesRead];
                        Buffer.BlockCopy(readBuffer, 0, buffer, 0, totalBytesRead);
                    }
                    return buffer;
                }
                finally
                {
                    if (stream.CanSeek)
                    {
                        stream.Position = originalPosition;
                    }
                }
            }
    
    0 讨论(0)
提交回复
热议问题