我正在使用James Montemagno的媒体插件来拍照。
出于某种原因,只有在手机上运行应用程序时,拍照时,缩略图才能在TestFolder中正确显示,但它们显示为空文件。
在模拟器中运行时,图像会正确显示。
这是我的代码:
SELECT
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE(X,'0]', '~'),
'[00000000','['),
'[0000','['),
'[00','['),
'[0','['),
'~','0]')
FROM YourTable
修改1:
简而言之,由于某些原因,Media插件无法在我的手机上运行(华为P8 Lite)。我在GitHub上尝试过这个示例:(使用方法)
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;
}
照片确实会在模拟器中显示,但不会在手机上显示(相机会打开并拍照)。如上所述,如果我访问相册文件夹,则会出现空缩略图。
修改2
这是android清单文件:
https://github.com/jamesmontemagno/MediaPlugin
我还补充说:
<?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>
两个权限都按照授权返回。
编辑3
我尝试过三星Galaxy A3并且效果很好,在相机胶卷和应用程序中正确显示。
但这就是我的华为P8手机相机胶卷上出现的图像:
编辑4
我尝试使用其他华为P8设备并遇到同样的问题。
答案 0 :(得分:2)
要解决我设置的问题:
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上将图像大小设置为较小,也没有任何区别。
似乎调整大小仅适用于内部应用程序存储图像,而不适用于存储在相机胶卷文件夹中的图像。
调整图像大小后,照片会在应用程序中正确显示。