Forums Développement Multimédia

Aller au contenu

Resize Bitmap chargement externe

as3 bitmap bitmapdata CODE Actionscript

11 réponses à ce sujet

#1 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 11:48 AM

:mrgreen: Bonjour à tous!
Voilà je suis confronté à un nouveau problème encore une fois. Je vous rassure j'ai regardé les forums avant de poster mais je n'ai pas trouvé mon bonheur malheureusement :cry:

Mon problème est tout simple mais j'ai du mal à saisir la logique Bitmapdata d'AS3.

Ce que je veux c'est juste:

1- Je définis un URLRequest
2- Je charge l'image correspondant à cet URL
3- J'écoute la fin du chargement
4- A la fin du chargement de cette image je veux redimensionner mon image à l'aide de Bitmapdata afin de conserver la qualité de l'image de base mais avec une taille plus petite.

J'ai donc essayé ceci:


var load_SQL_inf:URLLoader = new URLLoader();
   var urlRequest_inf:URLRequest=new URLRequest(all.SQL_PORTFOLIO);
 
         var variables_inf:URLVariables=new URLVariables();
          //♪Variable envoyé à SQL
          variables_inf.type = "inf"; //♪Le type de l'élément cliqué (web/inf)
          //Méthode POST
          urlRequest_inf.method = URLRequestMethod.POST;
          //♪Les données à transmettre
          urlRequest_inf.data = variables_inf;
   
    load_SQL_inf.load(urlRequest_inf);
 
    load_SQL_inf.addEventListener(Event.COMPLETE, onComplete_handler);
 

Jusque là tout va bien :mrgreen: la requête renvoi la bonne information


function onComplete_handler(evt:Event):void{
var image:URLRequest = new URLRequest("http://" + myData.portfolio[index].image);
    var conteneurImage:Loader = new Loader();
    conteneurImage.load(image);
conteneurImage.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
}
 

Et c'est là que sa se gâte :eusa_doh:


function loaded(evt:Event):void{
       
          path.mc_port_image.addChild( evt.currentTarget );
    var bitmap:Bitmap = ( evt.currentTarget.loader.content ) as Bitmap;
    bitmap.width = 10;
    bitmap.height = 10;
}
 

Aucune image n'apparaît, si je change juste comme ceci



function loaded(evt:Event):void{
       
          path.mc_port_image.addChild( conteneurImage );
}
 
Sa fonctionne parfaitement mais là ce n'est plus du bitmap.


:ph34r: J'ai hâte d'en avoir finit avec ce code, sa commence à me chauffer sévère de passer plus de temps à surfer sur les forums que de coder pour juste redimensionner une image basique...

:wub: Merci de m'avoir lu~

#2 Krevare

    Ceinture Noire

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 923 messages

Posté 19 September 2012 - 12:29 PM

Hello,

Sauf boulette de ma part ton image loadée est déja en bitmap non ? Un .jpg c'est du bitmap ? asBitmap pourrait servir pour une image vecto mais la c est inutile non ?

Essaye ta technique qui fonctionne en essayant d'ajouter :

tonimageloadee.smoothing = true;
 

Normalement la propriété smoothing sur true permets de garder une qualité correct même après redimensionnement.

J'espère que ça te fera avancer ;-)

Fred.

#3 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 12:34 PM

Salut Fred et merci pour ta réponse!

Malheureusement cela ne fonctionne pas,


1119 : Accès à la propriété smoothing peut-être non définie, via la référence de type static flash.display:Loader.


du moins j'ai essayé comme ceci:

conteneurImage.smoothing = true;

comme ceci également:

conteneurImage.content.smoothing = true;

mais également ceci

conteneurImage.loader.content.smoothing = true;

Aucune de ses solutions ne fonctionne...

#4 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 12:35 PM

A par contre en revanche cela fonctionne parfaitement :mrgreen:



conteneurImage.width = 10;
conteneurImage.height = 10;

Un gros progrès!

#5 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 12:40 PM

Par contre c'est dégueu la qualité :mrgreen:

#6 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 19 September 2012 - 13:55 PM

Bonjour XueFang.

A la base, ta demande est soit floue, soit basée sur une incompréhension générale des différences entre bitmap et bitmapdata
Je parle de cette demande la :

Citation

je veux redimensionner mon image à l'aide de Bitmapdata afin de conserver la qualité de l'image de base mais avec une taille plus petite

Tu ne peux pas avoir tout à la fois.
On redimentionne une image (le bitmap, ce qui se voit)
On réechantillonne un bitampdata (ce qui contient les données)
Une image plus petite est de moindre qualité (moins détaillée) qu'une grande

Quand on redimensionne l'image, on modifie les dimensions du conteneur (le bitmap, mais tu pourrais agir directement sur le loader)
On peut redimensionner aussi souvent que l'on veut puisqu'on ne détruit pas les données (le bitmapdata).

Quand on rééchantillonne l'image, on détruit les données originelles et l'on en obtiens de nouvelles, avec une perte toujours sensible, que l'on agrandisse ou réduise l'image.
Si on rééchantillonne souvent, la qualité se dégrade de plus en plus et on finit par avoir une bouillie.

Ceci étant posé, que veux tu faire ?
Charger un bitmapdata (jpeg, png…) qui fait 100x100 pixels et l'afficher (bitmap) en 10x10 pixels ?
(en passant, 10x10 pixels c'est très très peu, tu auras de toute façon une icon pas très lisible)

Alors,

var conteneurImage:Loader = new Loader();
conteneurImage.load (new URLRequest("image.jpg"));
conteneurImage.contentLoaderInfo.addEventListener (Event.COMPLETE, loaded);

function loaded (event:Event):void {
   var bitmap:Bitmap = event.target.content;
   bitmap.width = bitmap.height = 10;
   bitmap.smoothing=true; //Ou false, parce qu'en 10 x 10, tu vas obtenir un truc tout mou
   addChild ( bitmap);
}


#7 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 14:02 PM

Merci pour tes lumières dldler :Hola: J'avoue que je ne comprenais pas trop les différences Bitmap/BitmapData.

J'avais écris 10 pour voir une réelle différence entre avant et après, en vrai c'est plutôt quelque chose du genre:


var ratio:Number = LOADER.height / screen_design.mc_conteneur_gde.height;

LOADER.height = LOADER.height / ratio;
LOADER.width = LOADER.width / ratio;

 
J'essai de suite ta suggestion! Merci! :wub:

#8 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 19 September 2012 - 14:05 PM

Voir le messageXueFang, le 19 September 2012 - 11:48 AM, dit :

Et c'est là que sa se gâte :eusa_doh:


function loaded(evt:Event):void{
       
          path.mc_port_image.addChild( evt.currentTarget );
        var bitmap:Bitmap = ( evt.currentTarget.loader.content ) as Bitmap;
        bitmap.width = 10;
        bitmap.height = 10;
}
 

Aucune image n'apparaît,

C'est tout à fait normal.
Une image apparaît si elle est inscrite sur une liste d'affichage avec la commande addChild.
Tu n'inscrit pas le bitmap, il ne sera pas affiché.





Voir le messageXueFang, le 19 September 2012 - 11:48 AM, dit :

si je change juste comme ceci



function loaded(evt:Event):void{
       
          path.mc_port_image.addChild( conteneurImage );
}
 
Sa fonctionne parfaitement mais là ce n'est plus du bitmap.

… heu… ça serait quoi alors, selon toi ?
evt.currentTarget.loader et conteneurImage sont 2 variables qui dirigent vers un seul et même objet.

#9 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 14:09 PM

:shock: Le truc de fou que je viens de découvrir... ce code que tu m'as donné fonctionne en ligne mais pas en local... -_- dans tous les cas sa fonctionne en ligne donc je m'en fou... <_< les mystères de l'informatique...

#10 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 14:11 PM

:shock: :shock: :shock: :shock: :shock: Encore plus fou... si j'écris

monLoader.width = 10;

Sa fonctionne en local mais pas en ligne... :Hola: AS3.. j'abdique!

#11 dldler

  • Community Manager
  • PipPipPipPipPipPipPipPip
  • 4163 messages

Posté 19 September 2012 - 14:15 PM

Parce qu'en ligne ton url n'est pas bonne, sans doute…

#12 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 19 September 2012 - 14:20 PM

Bon dans tous les cas sa m'à dépanné! Merki bien :roi:



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)