我想剪切从画廊或相机拍摄的照片。但是我看不到裁剪活动中的照片。只是没有来。我从相机拍摄一张照片,然后开始切割活动。屏幕看起来像这样:
相机和onActivityResult
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
currentPhotoPath = image.getAbsolutePath();
return image;
}
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
Log.d("FotografHata",""+ex);
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.maksu.aquarium.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
Uri uri = Uri.parse(currentPhotoPath);
openCropActivity(uri, uri);
} else if (requestCode == UCrop.REQUEST_CROP && resultCode == RESULT_OK) {
Uri uri = UCrop.getOutput(data);
}
}
openCropActivity
private void openCropActivity(Uri girenUri, Uri cikanUri) {
UCrop.of(girenUri, cikanUri)
.withAspectRatio(16, 9)
.start(this);
}
答案 0 :(得分:2)
解决方案:
我正在使用多选器库使用画廊照片和挑选照片。选择照片后,我打开的照片是 ucrop库。
>放在您项目的班级下面。
遵循代码:
private String filePath;
private ImagePicker imagePicker;
private CameraImagePicker cameraImagePicker;
private void pickImage() {
//showProgressBarWithoutHide();
if (AppUtils.isValidContext(activity)) {
imagePicker = new ImagePicker(activity);
imagePicker.setImagePickerCallback(pickerCallback);
//imagePicker.allowMultiple(); // Default is false
imagePicker.shouldGenerateMetadata(false); // Default is true
imagePicker.shouldGenerateThumbnails(false); // Default is true
imagePicker.pickImage();
}
}
private void cameraImg() {
if (AppUtils.isValidContext(activity)) {
if (!SystemUtils.checkForCamera(activity)) {
Snackbar.make(btnAddToGallery, "Your device doesn't support camera", Snackbar.LENGTH_LONG).show();
return;
}
cameraImagePicker = new CameraImagePicker(activity);
cameraImagePicker.setImagePickerCallback(pickerCallback);
cameraImagePicker.shouldGenerateMetadata(false); // Default is true
cameraImagePicker.shouldGenerateThumbnails(false); // Default is true
filePath = cameraImagePicker.pickImage();
Log.i(TAG, "filepath: " + filePath);
}
}
ImagePickerCallback pickerCallback = new ImagePickerCallback() {
@Override
public void onImagesChosen(List<ChosenImage> list) {
try {
Log.i(TAG, "onImagesChosen() " + list.size());
if (list.size() == 0) {
Snackbar.make(btnAddToGallery, R.string.err_failed_to_pick_img, Snackbar.LENGTH_LONG).show();
return;
}
final ChosenImage chosenImage = list.get(0);
if (AppUtils.isValidContext(activity) && isAdded()) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (chosenImage != null) {
Log.i(TAG, "getOriginalPath Path:" + chosenImage.getOriginalPath());
validateImagePath(chosenImage.getOriginalPath());
} else {
//hideProgressBar();
Snackbar.make(btnAddToGallery, "Failed to choose image", Snackbar.LENGTH_LONG).show();
Log.e(TAG, "Failed to choose image");
}
}
});
}
} catch (Throwable th) {
th.printStackTrace();
}
}
@Override
public void onError(String s) {
//hideProgressBar();
}
};
private void validateImagePath(String imagePath) {
String ext = FileUtils.getFileExtension(imagePath);
Log.i(TAG, "EXT: " + ext);
if (ext.equals("jpg") || ext.equals("png") || ext.equals("jpeg")) {
if (imagePath != null) {
File file = new File(imagePath);
long length = file.length();
Log.i(TAG, "File size is: " + length);
if (length > Constants.MAX_IMAGE_FILE_SIZE) {
//hideProgressBar();
Snackbar.make(btnAddToGallery, getString(R.string.err_img_too_large), Snackbar.LENGTH_LONG).show();
FileUtils.deleteFileFromPath(filePath);
return;
}
filePath = imagePath;
PerformCrop();
} else {
//hideProgressBar();
Toast.makeText(activity, R.string.err_failed_to_pick_img, Toast.LENGTH_SHORT).show();
}
} else {
//hideProgressBar();
Snackbar.make(btnAddToGallery, "Please select valid file.", Snackbar.LENGTH_LONG).show();
Log.e(TAG, "Please select valid file");
}
}
openCropActivity:
private void PerformCrop() {
try {
Uri sourceUri = Uri.parse("file://" + filePath);
Uri destUri = Uri.fromFile(new File(activity.getFilesDir(), "U_Crop_Image_" + System.currentTimeMillis() + ".png"));
UCrop uCrop = UCrop.of(sourceUri, destUri); //Uri.fromFile(new File(getCacheDir(), destinationFileName))
uCrop = basisConfig(uCrop);
uCrop = advancedConfig(uCrop);
uCrop.start(activity);
} catch (Throwable e) {
e.printStackTrace();
}
}
onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case Picker.PICK_IMAGE_DEVICE:
if (resultCode == Activity.RESULT_OK && data != null) {
if (imagePicker == null && AppUtils.isValidContext(activity)) {
imagePicker = new ImagePicker(activity);
imagePicker.setImagePickerCallback(pickerCallback);
}
if (imagePicker != null) {
imagePicker.submit(data);
}
} else {
Log.e(TAG, "PICK_IMAGE_DEVICE intent is null or result code is " + resultCode);
}
break;
case Picker.PICK_IMAGE_CAMERA:
if (resultCode == Activity.RESULT_OK && data != null) {
if (cameraImagePicker == null && AppUtils.isValidContext(activity)) {
cameraImagePicker = new CameraImagePicker(activity);
cameraImagePicker.reinitialize(filePath);
// OR in one statement
// imagePicker = new CameraImagePicker(Activity.getActivity(), outputPath);
cameraImagePicker.setImagePickerCallback(pickerCallback);
}
if (cameraImagePicker != null) {
cameraImagePicker.submit(data);
}
} else {
Log.e(TAG, "PICK_IMAGE_CAMERA intent is null or result code is " + resultCode);
if (filePath != null && filePath.length() > 0) {
PerformCrop();
} else {
Snackbar.make(btnAddToGallery, R.string.err_failed_to_pick_img, Snackbar.LENGTH_LONG).show();
}
}
break;
case UCrop.REQUEST_CROP:
if (resultCode == Activity.RESULT_OK) {
final Uri resultUri = UCrop.getOutput(data);
Log.e(TAG, "Cropped image: " + resultUri);
try {
if (resultUri != null && resultUri.toString().length() > 0) {
/* Remove dummy image */
// set crop Image...
}
} catch (Throwable e) {
e.printStackTrace();
}
//showCropAd();
} else if (resultCode == UCrop.RESULT_ERROR) {
try {
final Throwable cropError = UCrop.getError(data);
if (cropError != null && cropError.getMessage() != null) {
Log.e(TAG, "cropError: " + cropError.getMessage());
}
} catch (Throwable e) {
e.printStackTrace();
}
}
break;
}
}
结果:
我的应用程序演示跟随图像:
此代码仅供您参考。如果您仍然遇到任何问题,请告诉我。很高兴为您服务。
答案 1 :(得分:0)
我通过使用 @page "/results"
@inject Blazored.LocalStorage.ISyncLocalStorageService localStore
@inject IJSRuntime JSRuntime;
@inject Toolbelt.Blazor.I18nText.I18nText I18nText
<h1>@Language.T8</h1>
<div>
<div class="row">
<div class="column" id="chartColumn" style="width:80%;text-align:center">
<canvas id="myChart"></canvas>
</div>
<div class="column" style="width:20%;text-align:center;font-size:1.5vw">
<br />
<br />
<br />
<br />
<span>
@ResultInText <br />
</span>
<h1 style="font-weight:bolder">@FilterSavings</h1>
<br />
<br />
<span>
@WasteTextPaper<br />
@WasteTextPlastic
</span>
@if (SelectedChartCategory == 13)
{
<br />
<br />
<br />
<br />
<br />
}
<span style="font-size:0.4vw">@DisclaimerText</span>
</div>
</div>
<hr />
<div class="row">
<div class="column" style="width:30%">
<b>@Language.T33</b>
</div>
<div class="column" style="width:70%">
<b>@Language.T34</b>
</div>
</div>
<div class="row">
<div class="column" style="width:30%">
<div class="btn-group">
<button type="button" class="btn btn-primary" style="outline-color:red" @onclick="() => UpdateTheChart(11)">@Language.T35</button>
<button type="button" class="btn btn-primary" @onclick="() => UpdateTheChart(12)">@Language.T36</button>
<button type="button" class="btn btn-primary" @onclick="() => UpdateTheChart(13)">@Language.T37</button>
</div>
</div>
<div class="column" style="width:70%">
<div class="btn-group">
<button type="button" class="btn btn-primary" @onclick="() => UpdateTheChart(21)">@Language.T138</button>
<button type="button" class="btn btn-primary" @onclick="() => UpdateTheChart(22)">@Language.T38</button>
<button type="button" class="btn btn-primary" @onclick="() => UpdateTheChart(23)">@Language.T39</button>
<button type="button" class="btn btn-primary" @onclick="() => UpdateTheChart(24)">@Language.T40</button>
</div>
</div>
</div>
</div>
@code {//handles initialization
I18nText.Language Language = new I18nText.Language();
List<float> retResultMHC = null;
List<float> retResultCom = null;
string retResultMHCProduct = "";
string retResultCOMProduct = "";
double retResultCostSavings = 0;
double retResultTimeSavings = 0;
double retResultWasteReduction = 0;
double retResultWastePaper = 0;
double retResultWastePlastic = 0;
string retResultWasteFlag = "";
string retResultCostFlag = "";
string retResultTimeFlag = "";
string FilterSavings = "";
string WasteTextPaper = "";
string WasteTextPlastic = "";
string retCurrency = "";
string DisclaimerText = "";
string ResultInText = "Cost savings for all patients during a year";
int SelectedChartCategory = 11;
int SelectedChartPeriod = 24;
int CalChartPeriod = 1;
string SelectedResultFlag = "savings";
string PeriodUOM = "year";
protected override void OnInitialized()
{
InitializeLocalStorage();
if (retResultMHC != null && retResultCom != null)
{
UpdateTheChart(11);
}
}
protected override async Task OnInitializedAsync()
{
Language = await I18nText.GetTextTableAsync<I18nText.Language>(this);
ResultInText = Language.T118 + Language.T127;
}
private void InitializeLocalStorage()
{
retResultMHCProduct = localStore.GetItemAsString("Result-MHC-Product");
retResultCOMProduct = localStore.GetItemAsString("Result-COM-Product");
retResultMHC = localStore.GetItem<List<float>>("Result-MHC");
retResultCom = localStore.GetItem<List<float>>("Result-COM");
retResultCostSavings = localStore.GetItem<double>("Result-Cost-Savings");
retResultTimeSavings = localStore.GetItem<double>("Result-Time-Savings");
retResultWasteReduction = localStore.GetItem<double>("Result-Waste-Reduction");
retResultCostFlag = localStore.GetItemAsString("Result-Cost-Flag");
retResultTimeFlag = localStore.GetItemAsString("Result-Time-Flag");
retResultWasteFlag = localStore.GetItemAsString("Result-Waste-Flag");
retResultWastePaper = localStore.GetItem<double>("Result-Waste-Paper");
retResultWastePlastic = localStore.GetItem<double>("Result-Waste-Plastic");
retCurrency = localStore.GetItemAsString("CurrencyKey");
}
}
@code{//handles chart
private IJSObjectReference _jsModule;
//this will be the live code
private async Task UpdateTheChart(int clickedButton)
{
//assign the selected parameters
if (clickedButton == 11 || clickedButton == 12 || clickedButton == 13)
SelectedChartCategory = clickedButton;
else
SelectedChartPeriod = clickedButton;
if (SelectedChartPeriod == 21)
{
PeriodUOM = Language.T124;
CalChartPeriod = 365;
}
else if (SelectedChartPeriod == 22)
{
PeriodUOM = Language.T125;
CalChartPeriod = 52;
}
else if (SelectedChartPeriod == 23)
{
PeriodUOM = Language.T126;
CalChartPeriod = 12;
}
else if (SelectedChartPeriod == 24)
{
PeriodUOM = Language.T127;
CalChartPeriod = 1;
}
else
{
PeriodUOM = Language.T127;
CalChartPeriod = 1;
}
ResultInText = "";
//things to do before showing the selected chart
if (SelectedChartCategory == 11)
{
if (retResultCostFlag == "savings")
ResultInText = Language.T118 + PeriodUOM;
else
ResultInText = Language.T119 + PeriodUOM;
WasteTextPaper = "";
WasteTextPlastic = "";
FilterSavings = string.Format(retCurrency + "{0:n0}", retResultCostSavings / CalChartPeriod);
DisclaimerText = "";
}
else if (SelectedChartCategory == 12)
{
if (retResultCostFlag == "savings")
ResultInText = Language.T120 + PeriodUOM;
else
ResultInText = Language.T121 + PeriodUOM;
WasteTextPaper = "";
WasteTextPlastic = "";
FilterSavings = string.Format("{0:n0}", retResultTimeSavings / CalChartPeriod) + " " + Language.T134;
DisclaimerText = "";
}
else if (SelectedChartCategory == 13)
{
if (retResultCostFlag == "reduction")
ResultInText = Language.T122 + PeriodUOM;
else
ResultInText = Language.T123 + PeriodUOM;
WasteTextPaper = Language.T128 + string.Format("{0:n2}", retResultWastePaper / CalChartPeriod) + " " + Language.T135;
WasteTextPlastic = Language.T129 + string.Format("{0:n2}", retResultWastePlastic / CalChartPeriod) + " " + Language.T135;
FilterSavings = string.Format("{0:n2}", retResultWasteReduction / CalChartPeriod) + " " + Language.T135;
DisclaimerText = Language.T136;
}
//calling js to make the chart
_jsModule = await JSRuntime.InvokeAsync<IJSObjectReference>("import", "./scripts/MakeChart.js");
if (SelectedChartCategory == 11)
{
await _jsModule.InvokeVoidAsync("showChartCost", CalChartPeriod, Language.T131, Language.T132, Language.T133);
}
else if (SelectedChartCategory == 12)
{
await _jsModule.InvokeVoidAsync("showChartTime", CalChartPeriod, Language.T130);
}
else
{
await _jsModule.InvokeVoidAsync("ShowChartPic");
}
}
}
传递源和目标 Uri
所以它一直在加载
对我有用的是我使用了 Uri.parse(myFile)
,就像这样
toUri()