.net maui blazor -显示来自android内部存储的图像

hfyxw5xn  于 12个月前  发布在  Android
关注(0)|答案(3)|浏览(122)

我使用.net毛伊岛blazor让设备拍照,然后作为其采取了它,我希望显示在屏幕上,使用户可以看到他们刚刚采取的图像。
我在MS文档上找到了如何使用var photo = await MediaPicker.CapturePhotoAsync();拍照
然后它给出了一种简单的方法,将其存储到设备的该高速缓存中,使用:

async Task LoadPhotoAsync(FileResult photo)
{
    // canceled
    if (photo == null)
    {
        PhotoPath = null;
        return;
    }
    // save the file into local storage
    var newFile = Path.Combine(FileSystem.CacheDirectory, photo.FileName);
    using (var stream = await photo.OpenReadAsync())
    using (var newStream = File.OpenWrite(newFile))
        await stream.CopyToAsync(newStream);

    PhotoPath = newFile;
}

字符串
我理解,它生成文件路径,使用保存蒸汽的FileResult基类,然后创建并将其转储到设备上。
然而,我的问题来自试图在html中显示该图像的形式。
我看到一个Stackoverflow建议使用

myImg.Source = PhotoPath;//Show on the front page


但我相信这只适用于.net毛伊岛,
与blazor和HTML元素,我希望它使用的
我目前将字符串存储在PhotoPath中,然后从HTML元素调用它,

<img src="@PhotoPath" ...>


但它只是想出了“图像未找到”图标,我不确定我是否必须设置一个阅读器进去,并抓住该图像,然后显示它虽然字节。
谢谢

omhiaaxx

omhiaaxx1#

<button class="btn btn-primary mb-3" @onclick="@(() => TakePhoto())">Take Photo</button>

@if (!string.IsNullOrEmpty(PhotoPath))
{
    <img width="320" height="320" src="@PhotoPath" />

}

@code
{
private string PhotoPath;
    private string localFilePath = "";

public async void TakePhoto()
    {
        if (MediaPicker.Default.IsCaptureSupported)
        {
            FileResult photo = await MediaPicker.Default.CapturePhotoAsync();
            if (photo == null)
            {
                //PhotoPath = null;
                return;
            }

localFilePath = Path.Combine(FileSystem.CacheDirectory, photo.FileName);
using Stream sourceStream = await photo.OpenReadAsync();
 using FileStream localFileStream = File.OpenWrite(localFilePath);
 await sourceStream.CopyToAsync(localFileStream);

 //additional

            sourceStream.Dispose();
            localFileStream.Dispose();
            var imageBytes = File.ReadAllBytes(localFilePath);
            PhotoPath = Convert.ToBase64String(imageBytes);
            PhotoPath = string.Format("data:image/png;base64,{0}", PhotoPath);
                StateHasChanged();

        }
   }
}

字符串

a2mppw5e

a2mppw5e2#

您可以创建一个variable并在存储照片后分配值。
与本Map像不同,我们需要将数据转换为字节Base64 string并指定其格式,以便正确显示。

示例代码

@if (imageSource is not null)
{
    <div>
        <img src="@imageSource" width="200" height="200" />
    </div>
}

@code {
    private string? imageSource;

    protected override void OnInitialized()
    {
        var newFile = filePath;
        var imageBytes  = File.ReadAllBytes(newFile);
        imageSource = Convert.ToBase64String(imageBytes);
        imageSource = string.Format("data:image/png;base64,{0}", imageSource);
    }

}

字符串

jgwigjjp

jgwigjjp3#

如果你正在寻找.net毛伊岛和到达这里像我比它可能会帮助你..

async void TakePhotoCicked(object sender, EventArgs e)
 {
     string sGpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

     if (MediaPicker.Default.IsCaptureSupported)
     {
         FileResult photo = await MediaPicker.Default.CapturePhotoAsync();

         if (photo != null)
         {
             // save the file into local storage
             string localFilePath = Path.Combine(sGpath, photo.FileName);

             using Stream sourceStream = await photo.OpenReadAsync();
             using FileStream localFileStream = File.OpenWrite(localFilePath);

             await sourceStream.CopyToAsync(localFileStream);

             string ReadFilePath = Path.Combine(sGpath, photo.FileName);

             imgFoto.Source = Path.Combine(sGpath, photo.FileName);

             GoNext.IsVisible = true;
         }
     }

 }

字符串
imgFoto.Source = Path.合并(sGpath,photo.FileName);
这是需要更改的值

相关问题