积极答复者
window8 如何较简单实现图片剪切和缩放?

问题
答案
-
Hi,
那可以使用WriteableBitmap来做。可以通过PixelBuffer直接对像素进行操作,不过WinRT里WriteableBitmap大幅简化过,你可以试试使用第三方工具WriteableBitmapEx来做。
WriteableBitmapEx:
http://writeablebitmapex.codeplex.com/
Aaron Xue [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 boypig 2012年12月3日 2:45
- 已标记为答案 Aaron XueModerator 2012年12月7日 7:36
全部回复
-
你可以做一个自定义控件,如下是一个简单的思路,你可以自己完善剩余的代码。
Xaml:
<Grid Background="Black"> <Image VerticalAlignment="Center" HorizontalAlignment="Center" ImageOpened="Image_ImageOpened_1"/> </Grid>
在Code behind代码中:
private async void Image_ImageOpened_1(object sender, RoutedEventArgs e) { var image = sender as Image; var source = image.GetValue(Image.SourceProperty) as Windows.UI.Xaml.Media.Imaging.BitmapImage; #region change the image stretch if (source.PixelHeight < this.ActualHeight && source.PixelWidth < this.ActualWidth) image.Stretch = Stretch.None; else image.Stretch = Stretch.Uniform; #endregion }
Thanks! Damon.Tian
-
你可以做一个自定义控件,如下是一个简单的思路,你可以自己完善剩余的代码。
Xaml:
<Grid Background="Black"> <Image VerticalAlignment="Center" HorizontalAlignment="Center" ImageOpened="Image_ImageOpened_1"/> </Grid>
在Code behind代码中:
private async void Image_ImageOpened_1(object sender, RoutedEventArgs e) { var image = sender as Image; var source = image.GetValue(Image.SourceProperty) as Windows.UI.Xaml.Media.Imaging.BitmapImage; #region change the image stretch if (source.PixelHeight < this.ActualHeight && source.PixelWidth < this.ActualWidth) image.Stretch = Stretch.None; else image.Stretch = Stretch.Uniform; #endregion }
Thanks! Damon.Tian
先谢谢了 不过我的 需求没那么简单 需要要代码来剪切和压缩图片,不是调简单的控件属性。。。 -
把你的图片流初始化一个位图解码器类,然后对位图进行转换(压缩等)
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
BitmapTransform transform = new BitmapTransform() {
ScaledWidth = Convert.ToUInt32(Scenario4WriteableBitmap.PixelWidth),
ScaledHeight = Convert.ToUInt32(Scenario4WriteableBitmap.PixelHeight)};
PixelDataProvider pixelData = await decoder.GetPixelDataAsync(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Straight,
transform,
ExifOrientationMode.IgnoreExifOrientation,
ColorManagementMode.DoNotColorManage);byte[] sourcePixels = pixelData.DetachPixelData();
using (Stream stream = WriteableBitmap.PixelBuffer.AsStream())
{
await stream.WriteAsync(sourcePixels, 0, sourcePixels.Length);
} -
把你的图片流初始化一个位图解码器类,然后对位图进行转换(压缩等)
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
BitmapTransform transform = new BitmapTransform() {
ScaledWidth = Convert.ToUInt32(Scenario4WriteableBitmap.PixelWidth),
ScaledHeight = Convert.ToUInt32(Scenario4WriteableBitmap.PixelHeight)};
PixelDataProvider pixelData = await decoder.GetPixelDataAsync(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Straight,
transform,
ExifOrientationMode.IgnoreExifOrientation,
ColorManagementMode.DoNotColorManage);byte[] sourcePixels = pixelData.DetachPixelData();
using (Stream stream = WriteableBitmap.PixelBuffer.AsStream())
{
await stream.WriteAsync(sourcePixels, 0, sourcePixels.Length);
}
这个如果图片太小,没法办法填充黑色吧!!! -
Hi,
那可以使用WriteableBitmap来做。可以通过PixelBuffer直接对像素进行操作,不过WinRT里WriteableBitmap大幅简化过,你可以试试使用第三方工具WriteableBitmapEx来做。
WriteableBitmapEx:
http://writeablebitmapex.codeplex.com/
Aaron Xue [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已建议为答案 boypig 2012年12月3日 2:45
- 已标记为答案 Aaron XueModerator 2012年12月7日 7:36