我寫了一個非常簡單的WPF應用程序來測試渲染控件的能力,該控件具有關聯的像素着色器到RenderTargetBitmap。然後我將位圖寫入文件(jpeg)。控件呈現在位圖上,但像素着色器效果未應用於控件。無法將像素着色器渲染到RenderTargetBitmap!請幫忙!
的代碼和XAML低於:
namespace TestPixelShader
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void OnSaveSnapshot(object sender, RoutedEventArgs e)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.DefaultExt = "jpg";
if ((bool)dlg.ShowDialog() == true)
{
String fileName = dlg.FileName;
int Height = (int)CanvasControl.ActualHeight;
int Width = (int)CanvasControl.ActualWidth;
RenderTargetBitmap bmp = new RenderTargetBitmap(
Width, Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(CanvasControl);
string Extension = System.IO.Path.GetExtension(fileName).ToLower();
BitmapEncoder encoder;
if (Extension == ".gif")
encoder = new GifBitmapEncoder();
else if (Extension == ".png")
encoder = new PngBitmapEncoder();
else if (Extension == ".jpg")
encoder = new JpegBitmapEncoder();
else
return;
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (Stream stm = File.Create(fileName))
{
encoder.Save(stm);
}
}
}
}
}
XAML:
<Window x:Class="TestPixelShader.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestPixelShader"
Height="400"
Width="300"
Title="Test Pixel Shader">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Canvas Grid.Column="0" x:Name="CanvasControl" Margin="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" >
<Canvas.Effect>
<local:TestPixelShaderEffect />
</Canvas.Effect>
<Canvas.Background>
<ImageBrush ImageSource="/TestPixelShader;component/Images/DSCF0225.JPG" />
</Canvas.Background>
</Canvas>
<Button x:Name="SaveSnapshotButton" Grid.Row="1" Click="OnSaveSnapshot" Height="40"
Content="Take Snapshot" Margin="5"/>
</Grid>
</Window>
可能清理你的代碼示例嗎? – 2010-10-02 18:50:45
這是一個http://stackoverflow.com/questions/545676/save-wpf-image-with-shader-effects-applied的副本? – 2010-10-02 19:13:34
不,我不相信這是所引用問題的重複。我試圖渲染到RTB,但是我使用的是PS 3.0,而Kris指出3.0沒有軟件回退,因此將被忽略。這似乎是我的問題的根源。我需要使用3.0,因爲2.0沒有足夠的能力。任何其他建議? – BigPrimate 2010-10-03 02:08:45