D3DImage Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
E ImageSource que mostre uma superfície Direct3D criada pelo utilizador.
public ref class D3DImage : System::Windows::Media::ImageSource
public class D3DImage : System.Windows.Media.ImageSource
type D3DImage = class
inherit ImageSource
Public Class D3DImage
Inherits ImageSource
- Herança
Exemplos
O seguinte exemplo de código mostra como declarar a D3DImage em XAML. Deve mapear o namespace System.Windows.Interop, porque não está incluído nos namespaces XAML padrão. Para obter mais informações, consulte Passo a passo: Hospedando conteúdo Direct3D9 no WPF.
<Window x:Class="D3DHost.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interop;assembly=PresentationCore"
Title="MainWindow" Height="300" Width="300" Background="PaleGoldenrod">
<Grid>
<Image x:Name="imgelt">
<Image.Source>
<i:D3DImage x:Name="d3dimg" />
</Image.Source>
</Image>
</Grid>
</Window>
Observações
Use a classe D3DImage para hospedar conteúdo Direct3D numa aplicação Windows Presentation Foundation (WPF).
Chame o Lock método para alterar o conteúdo Direct3D apresentado pelo D3DImage. Chame o SetBackBuffer método para atribuir uma superfície Direct3D a um D3DImage. Chama o AddDirtyRect método para acompanhar as atualizações na superfície Direct3D. Chama o Unlock método para mostrar as áreas alteradas.
A D3DImage classe gerencia dois buffers de exibição, que são chamados de buffer traseiro e buffer frontal. O buffer traseiro é a superfície do Direct3D. As alterações no buffer traseiro são copiadas para o buffer frontal quando o método Unlock é chamado, sendo exibido no hardware. Ocasionalmente, o buffer frontal fica indisponível. Essa falta de disponibilidade pode ser causada por bloqueio de tela, aplicativos Direct3D exclusivos em tela cheia, troca de usuário ou outras atividades do sistema. Quando isso ocorre, a sua aplicação WPF é notificada ao manipular o evento IsFrontBufferAvailableChanged. A forma como seu aplicativo responde à indisponibilidade do buffer frontal depende se o WPF está habilitado para retornar à renderização de software. O SetBackBuffer método tem uma sobrecarga que usa um parâmetro que especifica se o WPF retorna à renderização de software.
Responder a um buffer frontal indisponível quando o WPF não recorre à renderização por software
Quando você chama a SetBackBuffer(D3DResourceType, IntPtr) sobrecarga ou chama a SetBackBuffer(D3DResourceType, IntPtr, Boolean) sobrecarga com o enableSoftwareFallback parâmetro definido como false, o sistema de renderização libera sua referência ao buffer traseiro quando o buffer frontal fica indisponível e nada é exibido. Quando o buffer frontal estiver disponível novamente, o sistema de renderização acionará o IsFrontBufferAvailableChanged evento para notificar seu aplicativo WPF. Pode criar um manipulador de eventos para o evento IsFrontBufferAvailableChanged que permitirá reiniciar a renderização com uma superfície Direct3D válida. Para reiniciar a renderização, você deve chamar SetBackBuffer.
Responder a um buffer frontal indisponível quando o WPF regressa à renderização por software
Quando você chama a SetBackBuffer(D3DResourceType, IntPtr, Boolean) sobrecarga com o enableSoftwareFallback parâmetro definido como true, o sistema de renderização mantém sua referência ao buffer traseiro quando o buffer frontal fica indisponível, portanto, não há necessidade de chamar SetBackBuffer quando o buffer frontal estiver disponível novamente. Podem existir situações em que o dispositivo do utilizador se torne indisponível. Quando isso acontecer, chame SetBackBuffer para libertar a referência do WPF ao back buffer. Se você precisar redefinir seu dispositivo, chame SetBackBuffer com o backBuffer parâmetro definido como nulle, em seguida, chame SetBackBuffer novamente com backBuffer definido para uma superfície Direct3D válida.
Note
O desempenho depende muito das definições da superfície Direct3D. Para obter mais informações, consulte Considerações de Desempenho para Direct3D9 e Interoperabilidade WPF.
Note
A classe D3DImage não exibe conteúdo Direct3D quando WPF renderiza em software, como numa ligação Ambiente de Trabalho Remoto, a menos que chame SetBackBuffer(D3DResourceType, IntPtr, Boolean) e especifique true para o parâmetro enableSoftwareFallback.
Construtores
| Name | Description |
|---|---|
| D3DImage() |
Inicializa uma nova instância da D3DImage classe. |
| D3DImage(Double, Double) |
Inicializa uma nova instância da D3DImage classe com a resolução de exibição especificada. |
Campos
| Name | Description |
|---|---|
| IsFrontBufferAvailableProperty |
Identifica a IsFrontBufferAvailable propriedade de dependência. |
Propriedades
| Name | Description |
|---|---|
| CanFreeze |
Obtém um valor que indica se o objeto pode ser tornado inmodificável. (Herdado de Freezable) |
| DependencyObjectType |
Obtém o DependencyObjectType que envolve o tipo CLR desta instância. (Herdado de DependencyObject) |
| Dispatcher |
Percebe o Dispatcher que isto DispatcherObject está associado. (Herdado de DispatcherObject) |
| HasAnimatedProperties |
Obtém um valor que indica se um ou mais AnimationClock objetos estão associados a alguma das propriedades de dependência deste objeto. (Herdado de Animatable) |
| Height |
Obtém a altura do D3DImage. |
| IsFrontBufferAvailable |
Obtém um valor que indica se existe um front buffer. |
| IsFrozen |
Recebe um valor que indica se o objeto é atualmente modificável. (Herdado de Freezable) |
| IsSealed |
Recebe um valor que indica se esta instância está atualmente selada (apenas leitura). (Herdado de DependencyObject) |
| Metadata |
Obtém os metadados associados à fonte da imagem. |
| PixelHeight |
Obtém a altura do D3DImage, em pixels. |
| PixelWidth |
Obtém a largura do D3DImage, em pixels. |
| Width |
Obtém a largura do D3DImage. |
Métodos
| Name | Description |
|---|---|
| AddDirtyRect(Int32Rect) |
Especifica a área do buffer traseiro que mudou. |
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Aplica-se a AnimationClock um ao especificado DependencyProperty. Se a propriedade já estiver animada, utiliza-se a especificada HandoffBehavior . (Herdado de Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Aplica-se a AnimationClock um ao especificado DependencyProperty. Se a propriedade já estiver animada, utiliza-se o SnapshotAndReplace comportamento de handoff. (Herdado de Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Aplica uma animação ao especificado DependencyProperty. A animação é iniciada quando o frame seguinte é renderizado. Se a propriedade especificada já estiver animada, é usada a especificada HandoffBehavior . (Herdado de Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Aplica uma animação ao especificado DependencyProperty. A animação é iniciada quando o frame seguinte é renderizado. Se a propriedade especificada já estiver animada, utiliza-se o SnapshotAndReplace comportamento de handoff. (Herdado de Animatable) |
| CheckAccess() |
Determina se o thread que chama tem acesso a este DispatcherObject. (Herdado de DispatcherObject) |
| ClearValue(DependencyProperty) |
Limpa o valor local de uma propriedade. A propriedade a ser limpa é especificada por um DependencyProperty identificador. (Herdado de DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Limpa o valor local de uma propriedade de apenas leitura. O imóvel a ser limpo é especificado por um DependencyPropertyKey. (Herdado de DependencyObject) |
| Clone() |
Cria um clone modificável deste D3DImage objeto, fazendo cópias profundas dos valores desse objeto. Ao copiar propriedades de dependência, este método copia referências de recursos e ligações de dados (que podem já não ser resolvidas), mas não as animações nem os seus valores atuais. |
| CloneCore(Freezable) |
Torna a instância um clone (cópia profunda) dos valores especificados Freezable usando valores base (não animados). |
| CloneCurrentValue() |
Cria um clone modificável deste D3DImage objeto, fazendo cópias profundas dos valores atuais desse objeto. Referências de recursos, ligações de dados e animações não são copiadas, mas os seus valores atuais são copiados. |
| CloneCurrentValueCore(Freezable) |
Torna a instância um clone modificável (cópia profunda) do especificado Freezable usando valores atuais de propriedades. |
| CoerceValue(DependencyProperty) |
Coage o valor da propriedade de dependência especificada. Isto é conseguido invocando qualquer CoerceValueCallback função especificada nos metadados da propriedade para a propriedade de dependência tal como existe na chamada DependencyObject. (Herdado de DependencyObject) |
| CopyBackBuffer() |
Cria uma cópia de software do D3DImagearquivo . |
| CreateInstance() |
Inicializa uma nova instância da Freezable classe. (Herdado de Freezable) |
| CreateInstanceCore() |
Quando implementado numa classe derivada, cria-se uma nova instância da D3DImage classe derivada. |
| Equals(Object) |
Determina se um fornecido DependencyObject é equivalente à corrente DependencyObject. (Herdado de DependencyObject) |
| Finalize() |
Liberta recursos e realiza outras operações de limpeza antes de ser D3DImage recuperado pela recolha de lixo. |
| Freeze() |
Torna o objeto atual immodificável e define a sua IsFrozen propriedade como |
| FreezeCore(Boolean) |
Torna o D3DImage immodificável ou determina se pode ser tornado immodificável. |
| GetAnimationBaseValue(DependencyProperty) |
Devolve o valor não animado do especificado DependencyProperty. (Herdado de Animatable) |
| GetAsFrozen() |
Cria uma cópia congelada do Freezable, usando valores base (não animados) da propriedade. Como a cópia está congelada, quaisquer subobjetos congelados são copiados por referência. (Herdado de Freezable) |
| GetAsFrozenCore(Freezable) |
Torna a instância um clone congelado do especificado Freezable usando valores base (não animados). |
| GetCurrentValueAsFrozen() |
Cria uma cópia congelada do Freezable usando os valores atuais das propriedades. Como a cópia está congelada, quaisquer subobjetos congelados são copiados por referência. (Herdado de Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Torna a instância atual um clone congelado do especificado Freezable. Se o objeto tiver propriedades de dependência animadas, os seus valores animados atuais são copiados. |
| GetHashCode() |
Obtém um código de hash para isto DependencyObject. (Herdado de DependencyObject) |
| GetLocalValueEnumerator() |
Cria um enumerador especializado para determinar quais as propriedades de dependência que têm valores localmente definidos neste DependencyObject. (Herdado de DependencyObject) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| GetValue(DependencyProperty) |
Devolve o valor efetivo atual de uma propriedade de dependência nesta instância de um DependencyObject. (Herdado de DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Reavalia o valor efetivo da propriedade de dependência especificada. (Herdado de DependencyObject) |
| Lock() |
Bloqueia o D3DImage e permite operações no back buffer. |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| OnChanged() |
Chamada quando o objeto atual Freezable é modificado. (Herdado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Este membro suporta a infraestrutura Windows Presentation Foundation (WPF) e não foi concebido para ser usado diretamente a partir do seu código. (Herdado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Assegura que os apontadores de contexto apropriados são estabelecidos para um DependencyObjectType membro de dados que acabou de ser definido. (Herdado de Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Sobrepõe a DependencyObject implementação de OnPropertyChanged(DependencyPropertyChangedEventArgs) para também invocar quaisquer Changed manipuladores em resposta a uma alteração da propriedade de dependência do tipo Freezable. (Herdado de Freezable) |
| ReadLocalValue(DependencyProperty) |
Devolve o valor local de uma propriedade de dependência, se esta existir. (Herdado de DependencyObject) |
| ReadPreamble() |
Garante que está a ser acedido Freezable a partir de um thread válido. Os herdeiros de Freezable devem chamar este método no início de qualquer API que leia membros de dados que não são propriedades de dependência. (Herdado de Freezable) |
| SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Atribui uma superfície Direct3D como fonte do back buffer. |
| SetBackBuffer(D3DResourceType, IntPtr) |
Atribui uma superfície Direct3D como fonte do back buffer. |
| SetCurrentValue(DependencyProperty, Object) |
Define o valor de uma propriedade de dependência sem alterar a sua fonte de valor. (Herdado de DependencyObject) |
| SetValue(DependencyProperty, Object) |
Define o valor local de uma propriedade de dependência, especificado pelo seu identificador de propriedade de dependência. (Herdado de DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Define o valor local de uma propriedade de dependência somente de leitura, especificado pelo DependencyPropertyKey identificador da propriedade de dependência. (Herdado de DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Devolve um valor que indica se os processos de serialização devem serializar o valor da propriedade de dependência fornecida. (Herdado de DependencyObject) |
| ToString() |
Cria uma representação em cadeia deste objeto com base na cultura atual. (Herdado de ImageSource) |
| ToString(IFormatProvider) |
Cria uma representação string deste objeto com base no IFormatProvider passed in. Se o fornecedor for |
| TryLock(Duration) |
Tenta bloquear o D3DImage e espera pelo tempo especificado. |
| Unlock() |
Diminui a contagem de bloqueios para o D3DImage. |
| VerifyAccess() |
Faz cumprir que o thread que chama tem acesso a este DispatcherObject. (Herdado de DispatcherObject) |
| WritePostscript() |
Eleva o Changed evento para o Freezable e invoca o seu OnChanged() método. As classes que derivam de Freezable devem chamar este método no final de qualquer API que modifique membros de classe que não estejam armazenados como propriedades de dependência. (Herdado de Freezable) |
| WritePreamble() |
Verifica se o Freezable não está congelado e que está a ser acedido a partir de um contexto de threading válido. Freezable os herdeiros devem chamar este método no início de qualquer API que escreva para membros de dados que não sejam propriedades de dependência. (Herdado de Freezable) |
evento
| Name | Description |
|---|---|
| Changed |
Ocorre quando o Freezable ou um objeto que contém é modificado. (Herdado de Freezable) |
| IsFrontBufferAvailableChanged |
Ocorre quando a IsFrontBufferAvailable propriedade muda. |
Implementações de Interface Explícita
| Name | Description |
|---|---|
| IFormattable.ToString(String, IFormatProvider) |
Formata o valor da instância atual usando o formato especificado. (Herdado de ImageSource) |