使用c#在Windows 8 metro应用中使用Instagram照片效果

时间:2013-03-07 07:03:40

标签: c# image-processing colors microsoft-metro direct2d

我需要实现Instagram照片效果,如amaro,hudson,sepia,rise等。我知道这篇文章只使用基本效果:http://code.msdn.microsoft.com/windowsdesktop/Metro-Style-lightweight-24589f50

人们建议的另一种方法是实现Direct2d,然后使用它。但为此我需要编写C ++代码,我没有经验。

有谁能建议用其他方式在c#中实现Instagram效果?

是否有针对这些效果的内置c ++文件?

1 个答案:

答案 0 :(得分:1)

请参阅CodeProject中的此示例:Metro Style Lightweight Image Processing

以上示例包含这些图像效果。

  • 否定
  • 滤色镜
  • 浮雕
  • 阳光
  • Black&白
  • 亮度
  • Oilpaint
  • 色调

请注意上面的示例似乎是在Windows 8的开发者预览或发布预览中实现的。所以你会收到这样的错误

  

'Windows.UI.Xaml.Media.Imaging.WriteableBitmap'不包含   带有1个参数的构造函数

因此,您必须通过传递图像的像素高度和像素宽度来创建WriteableBitmap的实例。我编辑了样本,它对我有用。您必须将wb = new WriteableBitmap(bs);更改为wb = await GetWB();

StorageFile originalImageFile;
WriteableBitmap cropBmp;
public async Task<WriteableBitmap> GetWB()
{
    if (originalImageFile != null)
    {
        //originalImageFile is the image either loaded from file or captured image.
        using (IRandomAccessStream stream = await originalImageFile.OpenReadAsync())
        {
            BitmapImage bmp = new BitmapImage();
            bmp.SetSource(stream);
            BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
            byte[] pixels = await GetPixelData(decoder, Convert.ToUInt32(bmp.PixelWidth), Convert.ToUInt32(bmp.PixelHeight));
            cropBmp = new WriteableBitmap(bmp.PixelWidth, bmp.PixelHeight);
            Stream pixStream = cropBmp.PixelBuffer.AsStream();
            pixStream.Write(pixels, 0, (int)(bmp.PixelWidth * bmp.PixelHeight * 4));
        } 
    }
    return cropBmp;
}

如果您遇到任何问题,请告诉我。