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

Flash Pascal Discussion :

Utilisation de GetPixel


Sujet :

Flash Pascal

  1. #1
    Membre expérimenté
    Utilisation de GetPixel
    Pour faire plaisir à Roland... :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    program getpixel;
     
    uses Flash8;
     
     {$FRAME_WIDTH 510}
     {$FRAME_HEIGHT 350}
     {$JPEG  nom 'voeux2012.jpg'}
     
     const frame_width=510;
           frame_height=350;
    type
      image = class(Movieclip)
        mybmp : BitmapData;
        Field:TextField;
        Font:TextFormat;
        constructor Create;
        Procedure domousemove;
      end;
     
     
    Function GetBvalue(coul:integer):integer;
    begin
     result :=coul Mod 256;
    end;
     
    Function GetGvalue(coul:integer):integer;
    begin
     result :=floor((Coul Mod 65536)/256);
    end;
     
    Function GetRvalue(coul:integer):integer;
    begin
     result :=Floor(Coul/65536);
    end;
     
    constructor Image.Create;
    begin
     inherited Create(nil,'mymovieclip',1);
     mybmp := BitmapData.Create(frame_width,frame_height);
     mybmp := loadBitmap('nom');
     attachBitmap(mybmp,1,'',false);
     Font:=TextFormat.Create( 'Arial',16,$000000,True,False,False,'center');
     onmousemove:=domousemove;
    end;
     
    Procedure Image.domousemove;
    var R,V,B:integer;
        rgb:number;
    begin
     clear;
     Field.text:='';
     mybmp.draw(self);
     rgb:=mybmp.GetPixel(_xmouse,_ymouse);
     R:=GetRValue(floor(rgb));
     V:=GetGValue(floor(rgb));
     B:=GetBValue(floor(rgb));
     field:=TextField.Create(self,'codeRGB',2,_xmouse-60,_ymouse-40,200,40);
     with field do
     begin
      setNewTextFormat(Font);
      text:='( '+inttostr(R)+' , '+inttostr(V)+' , '+inttostr(B)+' )';
     end;
    end;
     
    begin
     Image.Create;
    end.


    tu vas pouvoir de faire plaisir en complétant avec le code hexadécimal

  2. #2
    Rédacteur/Modérateur

    Citation Envoyé par Archimède Voir le message
    Pour faire plaisir à Roland...
    Très joli exemple !

  3. #3
    Membre expérimenté
    merci, toi qui te passionnes pour les changements de base...
    Je te laisse le plaisir de compléter l'affichage en hexadécimal si tu veux.

  4. #4
    Membre expérimenté
    Au fait le draw ne sert à rien ...
    il est à retirer.

  5. #5
    Expert éminent sénior
    Bonjour,

    voici une version modifiée avec quelques explications...si je puis me permettre

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    program getpixel;
     
    uses Flash8;
     
     {$FRAME_WIDTH 510}
     {$FRAME_HEIGHT 350}
     {$JPEG  nom 'voeux2012.jpg'}
     
     const frame_width=510;
           frame_height=350;
    type
      image = class(Movieclip)
        mybmp : BitmapData;
        Field:TextField;
        Font:TextFormat;
        constructor Create;
    // au lieu d'affecter la propriété onMouseMove on défini directement la méthode 
        Procedure onMouseMove;
      end;
     
     
    Function GetBvalue(coul:integer):integer;
    begin
     result :=coul Mod 256;
    end;
     
    Function GetGvalue(coul:integer):integer;
    begin
     result :=floor((Coul Mod 65536)/256);
    end;
     
    Function GetRvalue(coul:integer):integer;
    begin
     result :=Floor(Coul/65536);
    end;
     
    constructor Image.Create;
    begin
     inherited Create(nil,'mymovieclip',1);
    // loadBitmap crée l'image, pas la peine de le faire
    // mybmp := BitmapData.Create(frame_width,frame_height);
     mybmp := loadBitmap('nom');
     attachBitmap(mybmp,1,'',false);
     Font:=TextFormat.Create( 'Arial',16,$000000,True,False,False,'center');
     //onmousemove:=domousemove;
    // autant le créer une fois pour toute
     field:=TextField.Create(self,'codeRGB',2,0,0,200,40);
     field.setNewTextFormat(Font);
    end;
     
    Procedure Image.onMouseMove;
    var R,V,B:integer;
        rgb:number;
    begin
    // pourquoi tout effacer et tout redessiner ?!
     //clear;
     //Field.text:='';
     //mybmp.draw(self);
     rgb:=mybmp.GetPixel(_xmouse,_ymouse);
     R:=GetRValue(floor(rgb));
     V:=GetGValue(floor(rgb));
     B:=GetBValue(floor(rgb));
     
    // il a été créé une fois pour toute, pas la peine de recommencer à chaque fois
     //field:=TextField.Create(self,'codeRGB',2,_xmouse-60,_ymouse-40,200,40);
     
     // attention, il faut modifier Flash8.pas, _x et _y sont des Number et non des Integer
    // ou utiliser Round()
     field._x := Round(_xmouse - 60);
     field._y := Round(_ymouse - 60);
     with field do
     begin
      { ne fonctionne pas ! même bug que pour l'horloge avec Self dans With
      _x := self._xmouse - 60;
      _y := self._ymouse - 40;
      }
      //setNewTextFormat(Font);
      text:='( '+inttostr(R)+' , '+inttostr(V)+' , '+inttostr(B)+' )';
     end;
    end;
     
    begin
     Image.Create;
    end.


    Ne pas oublier qu'en Flash les éléments de l'écran sont modifiables sans avoir besoin de redessiner quoi que ce soit.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre expérimenté
    Merci pour tes rectifs. En effet, je raisonne toujours comme en delphi... C'est difficile de s'adapter . Le textfield, je le considère comme la méthode textout de canvas alors que cet un objet...c'est un réflexe...il faut que je me fasse violence...
    Je pense que maintenant c'est rentré...

    Le fait de redessiner aussi (réflexe delphi...)

    merci, tes corrections sont nécessaires.

  7. #7
    Membre expérimenté
    Pense aussi à la possibilité de changer le curseur parce que là, on n'a pas la possibilité d'en changer...

    bonne soirée.


    ps: j'ai modifié _x et _y de TextField en number...dans Flash8

  8. #8
    Expert éminent sénior
    Citation Envoyé par Archimède Voir le message
    Pense aussi à la possibilité de changer le curseur parce que là, on n'a pas la possibilité d'en changer...

    bonne soirée.


    ps: j'ai modifié _x et _y de TextField en number...dans Flash8
    je n'ai pas testé mais voici ce que j'ai trouvé en ActionScript... le listener peut très bien être le movieclip lui même.

    il faut juste ajouter l'objet Mouse
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      Mouse = external class
      { events :
        procedure onMouseDown;
        procedure onMouseMove;
        procedure onMouseUp;
        procedure onMouseWheel(delta: Number; scrollTarget: TObject);
      }
        class procedure addListener(listener: TObject);
        class function hide: Number;
        class function removeListener(listener: TObject): Boolean;
        class function show: Number;
      end;


    il faudrait que je trouve une syntaxe pour les évènements du listener...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

###raw>template_hook.ano_emploi###