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 :

Idée sur BitmapData


Sujet :

Flash Pascal

  1. #1
    Membre expérimenté
    Idée sur BitmapData
    Ci-joint sur le thème du getpixel, une autre variante qui va me servir pour illustrer la correction d'un exercice sur la numérisation de l'information :

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    program numerisation_de_l_information;
     
    uses
      Flash8,URealmovie;
     
    {$FRAME_WIDTH   500}
    {$FRAME_HEIGHT  550}
    {$FRAME_RATE 32}
    {$BACKGROUND $dcdcdc}
     
     const frame_width=500;
           frame_height=550;
    Type
     Smiley=class(Realmovie)
      mybmp : BitmapData;
      Field:TextField;
      Font:TextFormat;
      constructor create;
      procedure onMouseMove;
      procedure draw;
     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 Smiley.Create;
     begin
      inherited create(nil,'schema',1);
      setsize(frame_width,frame_height,0,0,10,11);
      draw;
      mybmp := BitmapData.Create(frame_width+1,frame_height+1); //obligé de le dimensionner avec un pixel supplémentaire pour voir toutes les lignes ?
      mybmp.draw(self);//On remplit le bitmap avec le contenu de smiley
      clear;//pour éviter deux couches de dessin une dans le movie et l'autre dans le bmp
      attachBitmap(mybmp,0,'',false);
      Font:=TextFormat.Create( 'Arial',16,$000000,True,False,False,'center');
      field:=TextField.Create(self,'codeRGB',1,0,0,200,40);
      Field.setNewTextFormat(Font);
     end;
     
    Procedure Smiley.onMouseMove;
    var R,V,B:integer;
        rgb:number;
    begin
     rgb:=mybmp.GetPixel(_xmouse,_ymouse);
     R:=GetRValue(floor(rgb));
     V:=GetGValue(floor(rgb));
     B:=GetBValue(floor(rgb));
     Field.text:='( '+inttostr(R)+' , '+inttostr(V)+' , '+inttostr(B)+' )';
     Field._x:=_xmouse-60;  //avec modif de TextField _x et_y en number !
     Field._y:=_ymouse-40;
    end;
     
    procedure Smiley.draw;
    var i:integer;
    begin
     beginFill($ffff00);
     Rrectangle(3,1,7,2);
     Rrectangle(1,3,2,8);
     Rrectangle(8,3,9,8);
     Rrectangle(3,9,7,10);
     RRectangle(2,2,3,3);
     RRectangle(2,8,3,9);
     RRectangle(7,2,8,3);
     RRectangle(7,8,8,9);
     EndFill();
     beginFill($000000);
     RRectangle(3,4,4,5);
     RRectangle(4,3,6,4);
     RRectangle(6,4,7,5);
     endFill();
     beginFill($0088FF);
     RRectangle(3,6,4,7);
     RRectangle(6,6,7,7);
     EndFill();
     linestyle(1,$000000);
     for i:=0 to 10 do Rline(i,0,i,11);
     for i:=0 to 11 do  Rline(0,i,10,i);
     linestyle(3,$FF0000);
     RRectangle(6,4,9,7);
    end;
     
    begin
     Smiley.create;
     stage.scaleMode :='noScale'; //on n'est pas en vectoriel...pour éviter les surprises dans le navigateur
    end.


    En fait ma question : comment faire pour réaliser la même chose en vectoriel ?
    Je pensais ne pas remplir mon bitmapdata et utiliser sa propriété transparent pour pouvoir l'incruster sur mon dessin dans le movie ; ce qui me permettrait de récupérer le getpixel et ainsi faire la même chose en restant en vectoriel.
    Est-ce que ça marcherait ?

  2. #2
    Membre expérimenté
    transparent à true dans le create de bitmapdata, ça ne marche pas :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     constructor Smiley.Create;
     begin
      inherited create(nil,'schema',1);
      setsize(frame_width,frame_height,0,0,10,11);
      draw;
      mybmp := BitmapData.Create(frame_width+1,frame_height+1,true); //true ici pour transparent
      attachBitmap(mybmp,0,'',false);
      Font:=TextFormat.Create( 'Arial',16,$000000,True,False,False,'center');
      field:=TextField.Create(self,'codeRGB',1,0,0,200,40);
      Field.setNewTextFormat(Font);
     end;

  3. #3
    Expert éminent sénior
    bonjour,

    je ne vois pas de solution simple pour connaître la couleur affichée à une position X, Y...mais dans le cadre de ton exemple, la position de la souris modulo la taille des carrés permet de savoir où l'on est et du coup la couleur qu'on a choisi pour ce carré
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre expérimenté
    Merci pour ta réponse...
    En ce qui concerne la modification du curseur et l'évenement onMouseWheeldown qui n'est pas présent, as -tu une possibilité pour apporter ces fonctionnalités à ton éditeur?

###raw>template_hook.ano_emploi###