Сохранить изображение WPF с применением эффектов шейдера - PullRequest
4 голосов
/ 13 февраля 2009

У меня есть WPF Image control с эффектом размытия. Есть ли способ сохранить изображение (с размытием) без использования RenderTargetBitmap?

Спасибо.

ОБНОВЛЕНИЕ: теперь я использую новый пользовательский эффект, производный от System.Windows.Media.Effects.ShaderEffect. Я хочу сохранить свое изображение с применением эффекта шейдера.

Ответы [ 5 ]

7 голосов
/ 21 февраля 2009

единственный способ отобразить растровое изображение - использовать RenderTargetBitmap.

Посмотрите на этот пример:

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

Надеюсь, это поможет

2 голосов
/ 28 января 2010

Это то, что я тоже хотел. В соответствии с этим: http://social.msdn.microsoft.com/Forums/en/wpfprerelease/thread/e2ebf264-e087-4bfe-a69b-24c884675c80 RenderTargetBitmap не использует HW (GPU) для визуализации, только программное обеспечение. Как жаль.

KV

2 голосов
/ 06 ноября 2009

Я знаю, что это старый вопрос ... но я решил указать людям на пост Джейми Родригеса (http://blogs.msdn.com/jaimer/archive/2009/07/03/rendertargetbitmap-tips.aspx) на эту тему.

У меня была ситуация, когда использование RenderTargetBitmap приводило к пустому изображению ... и ответ Джейми мне помог.

Надеюсь, это поможет кому-то еще.

1 голос
/ 13 февраля 2009

Поскольку эффект шейдера по определению применяется к видеокарте, единственный способ получить его копию в основной памяти - это извлечь ее из экранной памяти. Итак, RenderTargetBitmap - это ваше решение. Есть ли какая-то особая причина, по которой вы хотели этого избежать?

0 голосов
/ 16 июля 2013

Вот, пожалуйста, http://perspectivefx.codeplex.com/ и вся работа, выполняемая графическим процессором

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...