2009-02-13 4 views
4

J'ai un contrôle d'image WPF avec effet de flou attaché. Existe-t-il un moyen de sauvegarder l'image (avec flou) sans utiliser RenderTargetBitmap?Enregistrer l'image WPF avec les effets Shader appliqués

Merci.

MISE À JOUR: J'utilise maintenant nouvel effet personnalisé qui dérive de System.Windows.Media.Effects.ShaderEffect. Je voudrais enregistrer mon image avec l'effet shader appliqué.

Répondre

7

la seule façon que vous pouvez rendre le bitmap en utilisant RenderTargetBitmap.

Jetez un oeil à cet exemple:

BitmapSource bitmap=GetYourBitmap(); 
Rectangle r=new Rectangle(); 
r.Background=new ImageBrush(bitmap); 
r.Effect=yourEffect; 

Size sz=new Size(bitmap.PixelWidth, bitmap.PixelHeight); 
r.Measure(sz); 
r.Arrange(new Rect(sz); 

var rtb=new RenderTargetBitmap(); 
rtb.Render(r); 
return rtb;//here is your bitmap with effects applied 

Hope this helps

+5

la peine de souligner que cette traitera l'effet sur la CPU et non sur le GPU. –

1

Comme l'effet de shader est par définition appliquée sur la carte vidéo, la seule façon que vous pouvez obtenir une copie de celui-ci dans la mémoire principale est de saisir de la mémoire de l'écran. RenderTargetBitmap est donc votre solution. Y a-t-il une raison particulière que vous vouliez éviter?

+0

Salut U62, merci pour votre réponse. Je voulais l'éviter purement pour perf. les raisons. Merci. – Valentin

+0

chic, vous downvote ma réponse, puis accorder une prime et la réponse acceptée à quelqu'un qui vous dit exactement la même chose au cours d'une semaine plus tard. J'aime, les utilisateurs font vraiment ce qu'il est ... – U62

+0

désolé, l'homme, juste aimé l'autre réponse sur le vôtre ;-) – Valentin

2

Je sais que c'est une vieille question ... mais je pensais que je voudrais signaler les gens au poste de Jamie Rodriguez (http://blogs.msdn.com/jaimer/archive/2009/07/03/rendertargetbitmap-tips.aspx) sur ce sujet.

J'ai eu une situation où l'utilisation RenderTargetBitmap a été traduit dans une image vide ... et le poste de Jamie était la réponse pour moi.

Espérons que ça aide quelqu'un d'autre aussi.

Questions connexes