好的,我试过这段代码:
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
看起来无法完成这项工作。当我记录它时会打印出来:
content://media/external/images/media/25756
这对我没有帮助,因为我需要new File(Uri)
。奇怪的是,getImageUri方法返回Uri,但File似乎无法识别它。任何人都有从新制作的位图中检索Uri的方法吗?
P.S。据我所知,自KitKat以来它不起作用。
修改 这段代码有用,我想从中检索Uri:
croppedBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
cropImageView = (CropImageView) findViewById(R.id.CropImageView);
cropImageView.setImageBitmap(croppedBitmap);
Button crop = ...;
crop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cropContainer.setVisibility(View.GONE);
mImageView.setVisibility(View.VISIBLE);
Bitmap croppedImage = cropImageView.getCroppedImage();
mImageView.setImageBitmap(croppedImage);
paramsContener.setVisibility(View.VISIBLE);
}
});
答案 0 :(得分:1)
看起来无法完成这项工作
这将取决于“工作”是什么。
当我记录它时会打印:
content://media/external/images/media/25756
这对我没有帮助,因为我需要它用于新文件(Uri)
首先,如果要将位图保存到文件,请使用FileOutputStream
而不是ByteArrayOutputStream
。 Java文件I / O已经存在了大约20年。
其次,如果您希望从ContentProvider
MediaStore
获取文件路径,那么您会感到失望。您回复Uri
,就像问题中的content://
一样。 A Uri
is not a file。使用ContentResolver
和openInputStream()
等方法读取Uri
标识的数据。表示通过流获得的东西的不透明句柄的“URI”的概念至少与HTTP一样长,已经存在了大约25年。
奇怪的是,getImageUri方法返回Uri,但File似乎无法识别它。
这是因为Uri
不是文件。
答案 1 :(得分:1)
好的,我得到了感谢@CommonsWare - 做了这样的事情。希望也会帮助另一个人:
module.service('$Validation', ["$compile",function($compile){
this.validators = {
'phoneNumber': [['required', 1], ['minlength',6], ['maxlength', 10], ['pattern', /^[0-9]+$/.source]],
'phoneNumber2Custom': function(value){
return /^[0-9]{6,10}$/.test(value)
},
'userTwitter': function(value){
return /^@(.+)/.test(value)
}
// ...etc... /
}
this.add = function(scope, element, attrs, model){
var name = attrs.bkNgValidation, type;
if(!(type = this.validators[name])) return;
else if(angular.isFunction(type)) return (model.$validators[name] = type);
element.removeAttr("bk-ng-validation");
angular.forEach(type, function(expr){
element.attr(expr[0], expr[1])
});
$compile(element)(scope)
};
}]).directive('bkNgValidation', ["$Validation", function ($Validation) {
return {
require: '?ngModel',
priority: 1e5,
link: function(){
$Validation.add.apply($Validation, arguments);
}
}
}])