2013-03-07 6 views
1

Мне нужно реализовать такие фотоэффекты Instagram, как amaro, hudson, sepia, rise и т. Д. Я знаю, что в этой статье используются только основные эффекты: http://code.msdn.microsoft.com/windowsdesktop/Metro-Style-lightweight-24589f50Instagram Photo Effects в приложениях для подключения к Windows 8 с использованием C#

Другой способ, предложенный людьми, - реализовать Direct2d, а затем применить его. Но для этого мне нужно написать код на C++, где у меня есть нулевой опыт.

Может ли кто-нибудь предложить другой способ реализовать эффекты Instagram в C#?

Есть ли встроенный файл C++ для этих эффектов?

ответ

1

Пожалуйста, смотрите этот пример из CodeProject: Metro Style Lightweight Image Processing

Приведенный выше пример содержит эти графические эффекты.

  • Отрицательный
  • Светофильтр
  • Emboss
  • SunLight
  • Черный & Белый
  • Яркость
  • 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; 
} 

Позвольте мне знать, если вы столкнулись с какой-либо проблемы.