IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

DependencyProperty erreur de type (pour régler le contraste d'un mediaElement) (VS2010 VB.NET)


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut DependencyProperty erreur de type (pour régler le contraste d'un mediaElement) (VS2010 VB.NET)
    Bonjour,

    J''utilise la classe BrightContrastEffect trouvé ici http://khason.net/blog/brightness-an...in-wpf-35-sp1/

    Le type de la propriété Brightness (voir extrait de la classe en rouge) est enregistrée en Double et dans le setter en Single
    Cela fonctionne en XAML ou par code par binding sur un slider de réglage . Déjà la je séche !!!
    Pourquoi cela fonctionne ?


    Je veux entrer une valeur dans Brightness par exemple par un slider (SliderContrast) sans passer par XAML

    SetCurrentValue(BrightContrastEffect.BrightnessProperty, SliderContrast.Value)

    J'ai un message d'erreur: " la valeur de brightness est invalide. " ou alors le shader ne fonctionne plus .
    J'ai essayé de tout mettre en type double,single ,de caster en single la valeur du slider....mais rien n'y fait !!
    Les registres du shader sont en float(single VB.Net)

    Merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Extrait du shader
    sampler2D input : register(s0);
    float brightness : register(c0);[/B]
    Extrait de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Public Class BrightContrastEffect
        Inherits ShaderEffect
        Public Sub New()
            PixelShader = m_shader
            UpdateShaderValue(InputProperty)
            UpdateShaderValue(BrightnessProperty)
            UpdateShaderValue(ContrastProperty)
        End Sub
      .....
       ....
        Public Property Brightness() As Single
            Get
                Return CSng(GetValue(BrightnessProperty))
            End Get
            Set(value As Single)
                SetValue(BrightnessProperty, value)
            End Set
        End Property   
     Public Shared ReadOnly BrightnessProperty As DependencyProperty = DependencyProperty.Register("Brightness", GetType(Double), GetType(BrightContrastEffect), New UIPropertyMetadata(0.0, PixelShaderConstantCallback(0)))
    rigtn

  2. #2
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Bonjour,

    Citation Envoyé par Thierry2008 Voir le message
    Je veux entrer une valeur dans Brightness par exemple par un slider (SliderContrast) sans passer par XAML
    tout simplement instance.Brightness = value c'est une DP classique:
    http://msdn.microsoft.com/en-us/libr...code-snippet-1

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Bien sur .
    J'ai crée une instance de la classe pour accéder à DP Brightness J'ai déjà essayé.
    J'ai toujours cette erreur .La valeur du slider est typée double , même si je change en single erreur !!!

    Voici l'erreur

    Nom : err1.png
Affichages : 113
Taille : 69,8 Ko

    Voici le test.Même en écrivant csgn(sc2.Value) erreur ....

    Nom : err2.png
Affichages : 105
Taille : 30,0 Ko

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Tres bizarre,bizarre....!!!

    Chez moi le code donne par Bluedeep fonctionne comme un charme avec la valeur double du slider sans conversion:
    le xaml modifie du form pour tenir compte qu'on travaille en code behind .vb
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <Window x:Class="WpfBrightShader.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:ShaderEffectLibrary1;assembly=ShaderEffectLibrary1" 
        Title="Window1" Height="300" Width="300">
     
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition Height="auto"></RowDefinition>
                <RowDefinition Height="auto"></RowDefinition>
            </Grid.RowDefinitions>
            <Image Source="Resources/Nénuphars.jpg">
                <Image.Effect>
                    <local:BrightContrastEffect 
                        x:Name="bright"
                        Brightness="{Binding }" 
                        Contrast="{Binding }"/>
     
                </Image.Effect>
            </Image>
     
            <UniformGrid  Grid.Row="1">
                <TextBlock Text="Brightness"/>
                <Slider Maximum="1" Minimum="-1" Name="bVal"
                        ValueChanged="bVal_ValueChanged"/>
                <TextBlock Text="Contrast"/>
                <Slider Maximum="1"  Minimum="-1" Name="cVal"
                        ValueChanged="cVal_ValueChanged"/>
            </UniformGrid>
        </Grid>
    </Window>
    Et le code behind .vb du form:
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Imports ShaderEffectLibrary1
     
    Public Class Window1
     
        Private Sub bVal_ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double))
            'Me.bright.Contrast = CType(cVal.Value, Single) code à probleme qui utilise le Setter-à riper
            'le code bluedeep sette la valeur directement par le system de WPF sans passer par nos setters et getters
            Me.bright.SetCurrentValue(BrightContrastEffect.BrightnessProperty, bVal.Value)
        End Sub
     
        Private Sub cVal_ValueChanged(ByVal sender As System.Object, ByVal e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double))
            'Me.bright.Contrast = CType(bVal.Value, Single) code à probleme qui utilise le Setter-à riper
            Me.bright.SetCurrentValue(BrightContrastEffect.ContrastProperty, cVal.Value)
        End Sub
     
    End Class
    Le code du fichier .fx du pixelshader est inchange.....
    Ceci montre que l'appel à instance.SetCurrentValue court -circuite simplement nos "beaux" setters et setters.....!!!
    bon code.......

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    bonjour,

    Merci
    Oui ,bizarre.

    Cela fonctionne avec Effect.SetValue...... !!

    Je ne suis pas un pro ! Mais je ne comprends pas pourquoi le setter est en single et la DP enregistrée en double..C'est pas grave .Merci encore

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Imports System.Windows.Media
    ' Pour test i2=image  sc2=slider
    Class MainWindow
        Public ef As New BrightContrastEffect
        Sub New()    
            InitializeComponent()
            Dim ef = New BrightContrastEffect
            i2.Effect = ef
        End Sub
     
        Private Sub Sc2_ValueChanged(sender As System.Object, e As System.Windows.RoutedPropertyChangedEventArgs(Of System.Double)) Handles Sc2.ValueChanged
            i2.Effect.SetValue(BrightContrastEffect.BrightnessProperty, Sc2.Value) ' <---
            Me.Title = ef.Brightness.ToString 'visu contrast
        End Sub
    End Class

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/12/2014, 20h35
  2. [AC-2010] Erreur de type pour une entrée dans une table
    Par touraine dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/12/2012, 13h40
  3. Réponses: 2
    Dernier message: 03/01/2010, 22h05
  4. Erreur de type pour la fonction CStringArray::Add
    Par crossrobotik dans le forum MFC
    Réponses: 9
    Dernier message: 11/06/2007, 10h05
  5. Réponses: 1
    Dernier message: 12/12/2005, 03h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo