繁体   English   中英

Xamarin Forms - 媒体插件 - 手机上的空缩略图

[英]Xamarin Forms - Media Plugin - Empty thumbnails on phone

我正在使用James Montemagno的媒体插件来拍照。

出于某种原因,只有在手机上运行应用程序时,拍照时,缩略图才能在TestFolder中正确显示,但它们显示为空文件。

在模拟器中运行时,图像正确显示。

这是我的代码:

 public async Task<MediaFile> TakePhoto() {
            MediaFile result = null;

            await CrossMedia.Current.Initialize();

            if (CrossMedia.Current.IsCameraAvailable && CrossMedia.Current.IsTakePhotoSupported) {
                // Supply media options for saving our photo after it's taken.
                var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions {
                    SaveToAlbum = true,
                    Directory = "TestFolder",
                    Name="test.jpg"
                };

                // Take a photo of the business receipt.
                result = await CrossMedia.Current.TakePhotoAsync(mediaOptions);
            }
            return result;
        }

编辑1:

简而言之,由于某些原因,Media插件无法在我的手机上运行(华为P8 Lite)。 我在GitHub上尝试了这个示例:(用法)

https://github.com/jamesmontemagno/MediaPlugin 

照片确实显示在模拟器中但不在手机上(相机打开并拍照)。 如上所述,如果我访问相册文件夹,则会出现空缩略图。

编辑2

这是android清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk android:minSdkVersion="15" />
    <application android:label="MediaPluginTests.Droid"></application>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-feature android:name="android.hardware.camera" />
   <uses-feature android:name="android.hardware.camera.autofocus" />
</manifest>

我还补充说:

   var cameraStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Camera);
            var storageStatus = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Storage);

            if (cameraStatus != PermissionStatus.Granted || storageStatus != PermissionStatus.Granted) {
                var results = await CrossPermissions.Current.RequestPermissionsAsync(new[] { Permission.Camera, Permission.Storage });
                cameraStatus = results[Permission.Camera];
                storageStatus = results[Permission.Storage];
            }

两个权限都返回为已授予。

编辑3

我试过三星Galaxy A3并且工作得很好,在相机胶卷和应用程序中正确显示。

但这就是我的华为P8手机相机相册中图像的显示方式:

在此输入图像描述

编辑4

我尝试过不同的华为P8设备,遇到了同样的问题。

要解决我设置的问题:

PhotoSize = PhotoSize.Small

在StoreCameraMediaOptions上:

var mediaOptions = new Plugin.Media.Abstractions.StoreCameraMediaOptions {
                    SaveToAlbum = true,
                    Directory = "MyDirectory",
                    PhotoSize = PhotoSize.Small
                };

但是不是绑定到AlbumPath而是绑定到Path:

ViewModel的属性(使用PRISM for Xamarin Forms):

public MediaFile Photo {
            get {
                return photo;
            }
            set {
                SetProperty<MediaFile>(ref photo, value);
            }
    }


<Image Grid.Row="0" Grid.ColumnSpan="2" Source="{Binding Photo.Path}"></Image>

我意识到,如果我在照片拍摄后添加延迟:

await Task.Delay(5000)

图像将开始出现在相机胶卷文件夹中,但即使这样,图像也不会显示在屏幕上。

在Visual Studio中查看输出屏幕后,我注意到以下消息:

03-14 10:52:51.808 W/OpenGLRenderer(18106): Bitmap too large to be uploaded into a texture (3120x4160, max=4096x4096)

然后我意识到问题与图像大小有关,但即使在StoreCameraMediaOptions上将图像大小设置为小,也没有区别。

调整大小似乎仅适用于内部应用程序存储器映像,而不适用于存储在相机卷文件夹中的映像。

调整图像大小后,照片会在应用程序中正确显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM