有人可以发布一个如何使用相机、捕获图像、在图像视图中预览图像、以 jpg 格式压缩图像并将字节上传到远程服务器的示例吗?我能找到的最接近的是下面。我们有相机和图像捕捉,但我们需要知道如何预览、压缩/调整 jpg 到 640/480px 和大约 120kb 大小,然后将字节上传到远程服务器。感谢大家的帮助。 http://android-coding.blogspot.com/2010/12/intent-of-mediastoreactionimagecapture.html
2 回答
查看您的代码,我发现有些事情是错误的:
-[相机功能]-
- 不要自己创建文件。这不是必需的。使用 ContentResolver.Insert 函数返回一个包含图片的文件 URI,就像这里所做的一样,如果你想检查是否存在外部内存,还接管 isMounted。
- 您正在检查是否有数据,然后检查是否有缩略图。如果没有缩略图,您将获得完整的图像。这没有任何意义,除非你想在拇指没有归还的情况下制作完整版的拇指?您是否只想获取完整版本或两者兼而有之,而不是这个或那个?
您正在检索字符串值变量以获取完整图像的 URI?只需将您从我的第一点中的代码中获得的 uri 保存为属性(让我们在活动类中说“myPhotoURI”。在处理您的相机意图结果的 OnActivityResult 函数中,只需调用该 URI 并按以下方式使用它(是的,您'看对了;我什至没有为此使用数据意图,只是记住的 uri):
Bitmap imageFromCam = MediaStore.Images.Media.GetBitmap(this.ContentResolver, Android.Net.Uri.Parse(myPhotoURI));
要从图库中获取图像,只需使用此问题答案中的 SelectImageFromStorage() 函数并在 OnActivityResult 检查中检索所选图像的 URI,只需使用:
Android.Net.Uri selectedImageUri = data.ToURI();
这对我来说就像是一种魅力。
-[将数据发送到网络服务]-
假设您正在使用 WCF 或 Web 服务,它希望以字节数组的形式接收图像数据;该问题的批准答案提供了一个很好的示例,说明如何将图像转换为字节数组(无论如何,这是 WCF Web 服务想要的)
我认为这些方向会让你继续前进。
这是迄今为止最接近的示例......当使用额外输出时,这会带回 Null 数据。仍在尝试访问完整的图像/照片,而不是缩略图。
private void saveFullImage() {
Intent intent = new Intent(Android.Provider.MediaStore.ActionImageCapture);
string file = System.IO.Path.Combine(Android.OS.Environment.DirectoryDcim.ToString(), "test.jpg");
var outputFileUri = Android.Net.Uri.Parse(file);
intent.PutExtra(Android.Provider.MediaStore.ExtraOutput, outputFileUri);
StartActivityForResult(intent, TAKE_PICTURE);
}
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == TAKE_PICTURE)
{
Uri imageUri = null;
// Check if the result includes a thumbnail Bitmap
if (data != null)
{
if (data.HasExtra("data"))
{
var thumbnail = data.GetParcelableArrayExtra("data");
// TODO Do something with the thumbnail
}
}
else
{
var outputFileUri = data.GetParcelableArrayExtra("outputFileuri");
// TODO Do something with the full image stored
// in outputFileUri
}
}
}