Bitmap.CompressFormat文件流记录0个字节

时间:2019-01-22 19:20:30

标签: c# android xamarin

以下方法应该从android系统中的本地视频文件中获取缩略图。

问题是创建的文件记录了0个字节。

似乎文件流的记录存在一些我无法理解的问题,在仅执行0字节文件的方法执行期间,我没有出现任何错误。

当我尝试检索“内存流”的长度时,即使该特定文件的长度为1319,我仍然得到的结果为0。

private void GenerateThumbImage()
{
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.SetDataSource(directory + "snake.mp4");
    Bitmap bitmapData = retriever.GetFrameAtTime(15);
    if (bitmapData != null)
    {
        FileStream fileStream = new FileStream(directory + "snake.jpeg", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, 4096, true);
        MemoryStream stream = new MemoryStream();
        bitmapData.Compress(Bitmap.CompressFormat.Jpeg,85, stream);           
        stream.CopyTo(fileStream);
    }
}

1 个答案:

答案 0 :(得分:0)

您要在bitMapData压缩之前声明流。这是一个Android工作示例

public ImageSource GenerateThumbImage(string url, long usecond)
{   
    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
    retriever.SetDataSource(url, new Dictionary<string, string>());
    Bitmap bitmap = retriever.GetFrameAtTime(usecond);
    if (bitmap != null)
    {
        MemoryStream stream = new MemoryStream();
        bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
        byte[] bitmapData = stream.ToArray();
        return ImageSource.FromStream(() => new MemoryStream(bitmapData));
    }
    return null;
}