Witam wszystkich.
Jestem w trakcie tworzenia prostego programu do edycji zdjęć w silverlighcie i mam kilka problemów.
Może najpierw kod:
XAML
<code=xaml >

<UserControl x:Class="SilverlightApplication2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    mc:Ignorable="d"
    d:DesignHeight="1200" d:DesignWidth="800">

    <Grid x:Name="LayoutRoot" Background="Black" AllowDrop="True" Drop="LayoutRoot_Drop">   
        <StackPanel x:Name="DropCollection" Height="100" Margin="10,30,10,10" VerticalAlignment="Top" HorizontalAlignment="Center" Orientation="Horizontal">
            
        </StackPanel>
       
        <Image x:Name="DropImage"  Cursor="Hand" Width="400" >
            <i:Interaction.Behaviors>
                <ei:MouseDragElementBehavior ConstrainToParentBounds="True"/>
            </i:Interaction.Behaviors> 
            
                   </Image>
       
        <Button x:Name="btnMakeGray" Content="Gray" Height="50" HorizontalAlignment="Left" Margin="0,264,0,0"  VerticalAlignment="Top" Width="75"  />
        <Button x:Name="btnMakeSepia" Content="Sepia" Height="54" HorizontalAlignment="Left" Margin="0,342,0,0" VerticalAlignment="Top" Width="75" />
    </Grid>
    
</UserControl>
 

.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Windows.Media.Imaging;

namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
ImageSource img = DropImage.Source;
btnMakeGray.Click += (sender, args) => { DropImage.Source = MakeGray(DropImage); };

    }




   WriteableBitmap MakeGray(Image img)
    {
        WriteableBitmap bitmap = new WriteableBitmap(img, null);
        for (int y = 0; y < bitmap.PixelHeight; y++)
        {
            for (int x = 0; x < bitmap.PixelWidth; x++)
            {
                int pixelLocation = bitmap.PixelWidth * y + x;
                int pixel = bitmap.Pixels[pixelLocation];
                byte[] pixelBytes = BitConverter.GetBytes(pixel);
                byte bwPixel = (byte)(.299 * pixelBytes[2] + .587 * pixelBytes[1] + .114 * pixelBytes[0]);
                pixelBytes[0] = bwPixel;
                pixelBytes[1] = bwPixel;
                pixelBytes[2] = bwPixel;
                bitmap.Pixels[pixelLocation] = BitConverter.ToInt32(pixelBytes, 0);
            }
        }
        return bitmap;
    }
                       


    private void LayoutRoot_Drop(object sender, DragEventArgs e)
    {
        if (e.Data != null)
        {
            //Czytamy zrzucony plik
            FileInfo file = ((FileInfo[])e.Data.GetData(DataFormats.FileDrop)).FirstOrDefault();

            //Bitmapa
            BitmapImage img = new BitmapImage();

            using (Stream s = file.OpenRead())
            {
                img.SetSource(s);
            }

            
            DropImage.Source = img;

            Image newImage = new Image { Source = img };
            newImage.MouseLeftButtonDown += (a, b) =>
            {
                DropImage.Source = newImage.Source;
            };

            DropCollection.Children.Add(newImage);
        }
    }

    
    }
}
Jak widać ,obsługa zdarzenia drag&drop jest już zrobiona. 
Zmiana efektu zdjęcia odbywa się za pomocą WriteableBitmap .
Potrzebuję pomocy w :
- Napisaniu efektu sepia 
- Zamianie efektu zdjęcia (np. użyłem czarno biały ale chcę zmienić na sepię)
- Resetu do oryginalnego stanu zdjęcia (przed edycją)