【发布时间】:2017-10-06 11:00:01
【问题描述】:
我是 UWP 的新手,我的第一个任务是裁剪想象,现在我试图找到如何创建动态矩形来裁剪想象 p.s.我很抱歉语法不好。
我的程序必须有按钮来打开文件,然后屏幕上必须是用户可以更改或移动的动态矩形,当用户按下“保存”按钮时,图像将被裁剪为矩形大小 有我的 C# 代码 谢谢)
namespace Crop1
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
SoftwareBitmap softwareBitmap;
private async void OpenFile(object sender, RoutedEventArgs e)
{
FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
fileOpenPicker.FileTypeFilter.Add(".jpg");
fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;
var inputFile = await fileOpenPicker.PickSingleFileAsync();
if (inputFile == null)
{
// The user cancelled the picking operation
return;
}
using (IRandomAccessStream stream = await inputFile.OpenAsync(FileAccessMode.Read))
{
// Create the decoder from the stream
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
// Get the SoftwareBitmap representation of the file
softwareBitmap = await decoder.GetSoftwareBitmapAsync();
}
if (softwareBitmap.BitmapPixelFormat != BitmapPixelFormat.Bgra8 ||
softwareBitmap.BitmapAlphaMode == BitmapAlphaMode.Straight)
{
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
}
var source = new SoftwareBitmapSource();
await source.SetBitmapAsync(softwareBitmap);
// Set the source of the Image control
//imageControl.Source = source;
p1rect1.Fill = new ImageBrush
{
ImageSource = source
};
}
private async void Save(object sender, RoutedEventArgs e)
{
FileSavePicker fileSavePicker = new FileSavePicker();
fileSavePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
fileSavePicker.FileTypeChoices.Add("JPEG files", new List<string>() { ".jpg" , ".png"});
fileSavePicker.SuggestedFileName = "image";
var outputFile = await fileSavePicker.PickSaveFileAsync();
if (outputFile == null)
{
// The user cancelled the picking operation
return;
}
// SoftwareBitmap softwareBitmap;
// BitmapDecoder decoder = await BitmapDecoder.CreateAsync(imageControl);
SaveSoftwareBitmapToFile(softwareBitmap, outputFile);
}
private async void SaveSoftwareBitmapToFile(SoftwareBitmap softwareBitmap, StorageFile outputFile)
{
using (IRandomAccessStream stream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
{
// Create an encoder with the desired format
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
// Set the software bitmap
encoder.SetSoftwareBitmap(softwareBitmap);
//// Set additional encoding parameters, if needed
//encoder.BitmapTransform.ScaledWidth = 320;
//encoder.BitmapTransform.ScaledHeight = 240;
// encoder.BitmapTransform.Rotation = Windows.Graphics.Imaging.BitmapRotation.Clockwise90Degrees;
encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Fant;
encoder.IsThumbnailGenerated = true;
try
{
await encoder.FlushAsync();
}
catch (Exception err)
{
switch (err.HResult)
{
case unchecked((int)0x88982F81): //WINCODEC_ERR_UNSUPPORTEDOPERATION
// If the encoder does not support writing a thumbnail, then try again
// but disable thumbnail generation.
encoder.IsThumbnailGenerated = false;
break;
default:
throw err;
}
}
if (encoder.IsThumbnailGenerated == false)
{
await encoder.FlushAsync();
}
}
}
}
}
【问题讨论】:
-
请出示您的代码,您尝试了什么?
-
你能给我一些图片告诉我你想要什么吗?
-
@lindexi 我的程序必须有按钮才能打开文件,然后屏幕上必须是用户可以更改或移动的动态矩形,当用户按下“保存”按钮时图像将裁剪为矩形大小