Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1637 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java Général] fonction zoom

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java Général] fonction zoom

n°328887
falconn
Posté le 10-03-2003 à 22:48:03  profilanswer
 

Bonjour,  
 
J'ai à ma disposition un tableau de byte, chaque case contenant les valeurs d'un pixel d'une image de vidéo. Je voudrai prendre une partie de ce tableau pour l'agrandir en dupliquant les pixels.  
La contrainte c'est qu'il faut que le tableau d'arrivé est la même taille que le tableau d'origine. Avez-vous une idée, un algo pour réaliser cela?  
Merci d'avance!

mood
Publicité
Posté le 10-03-2003 à 22:48:03  profilanswer
 

n°328892
the real m​oins moins
Posté le 10-03-2003 à 22:50:05  profilanswer
 

donc en gros tu veux afficher 2 fois plus de pixels que sur l'image originale en en utilisant pas plus, c'est ça? [:taichetoz]


Message édité par the real moins moins le 10-03-2003 à 22:50:47

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°328908
the real m​oins moins
Posté le 10-03-2003 à 22:59:45  profilanswer
 

il se pourrait tres bien que je n'ai pas du tout compris (je suis pas tres fut-fut), pas la peine de s'exciter hein :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°328910
HappyHarry
Posté le 10-03-2003 à 23:01:02  profilanswer
 

the real moins moins a écrit :

je suis pas tres fut-fut)


 
je garde ca en souvenir :whistle:

n°328911
the real m​oins moins
Posté le 10-03-2003 à 23:02:09  profilanswer
 

HappyHarry a écrit :


 
je garde ca en souvenir :whistle:

:D
moi je le sais au moins :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°328938
HappyHarry
Posté le 10-03-2003 à 23:40:13  profilanswer
 

the real moins moins a écrit :

:D
moi je le sais au moins :o


 
:fuck:

n°328954
falconn
Posté le 11-03-2003 à 00:02:45  profilanswer
 

lol nan c'est pas tout à fait ca :-) je prends une sous partie z du tableau x. Il faudrait que le tableau z est la même taille que le tableau original x en duppliquant les valeurs de z. ceci pour créer un effet de zoom ;) j'ai été assez clair la? :-)

n°328962
the real m​oins moins
Posté le 11-03-2003 à 00:05:29  profilanswer
 

ben euh tu fais une bete boucle quoi [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°328998
falconn
Posté le 11-03-2003 à 00:17:36  profilanswer
 

lol si c'était si simple je serai preneur :) le problème c'est trouver le nombre de pixels que tu dois duppliquer et dans quel proportions...

n°329007
the real m​oins moins
Posté le 11-03-2003 à 00:19:52  profilanswer
 

ha euh ok j'etais parti sur l'idée que tu faisais du 200%
 
bah regle de 3 [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 11-03-2003 à 00:19:52  profilanswer
 

n°329143
falconn
Posté le 11-03-2003 à 00:47:23  profilanswer
 

la règle de 3?

n°329159
souk
Tourist
Posté le 11-03-2003 à 02:37:38  profilanswer
 

ben faut faire ta grande matrice de point, et remplir les vides en interpolant, apres, a toi de choisir si tu fais du lineaire, du carre, du cubique etc...
 
y a ca aussi, ca peut peut-etre t'aider :  
 http://www.tsi.enst.fr/tsi/enseign [...] terpol_tv/

n°329195
gfive
Posté le 11-03-2003 à 08:54:30  profilanswer
 

En gros, tu crées un nouveau tableau de la taille de l'ancien, tu y met les points d'origine de ton image, qui étaient situés dans la zone à agrandir. Par contre, tu ne les metpas n'importe où : il faut les répartir équitablement dans ta nouvelle image.Donc,; si ton image d'origine mesurait "x*y" et que la zone à zoomer mesure "zx*zy", tu met une ligne de points toutes les "(int) y/zy" pixels, et une colonne de pixels tous les "(int) z/zx"  
 
Tu obtiens donc un tableau avec des cases vides, et des pixels "colorés" sur un maillage de "(int) y/zy" pixels en vertical, et "(int) z/zx" en horizontal : il ne te reste donc plus qu'à boucher les trous par interpolation, comme l'a judicieusement suggéré Souk..
 
Le problème, c'est de faire l'interpolation avec un tableau mono-dimensionnel : si ton tableau n'a qu'une 'ligne' pour représenter ton image, tu vas être embêté pour l'interpolation (enfin, pas vraiment, mais au niveau des calculs des indices des cases à utiliser pour calculer la couleur des points environnants, ça va être galère)
 
Ouala ouala.


Message édité par gfive le 11-03-2003 à 09:03:16
n°329200
El_gringo
Posté le 11-03-2003 à 08:56:55  profilanswer
 

gfive a écrit :

En gros, tu crées un nouvea


 
Paf, planté ! :D

n°329208
benou
Posté le 11-03-2003 à 09:02:03  profilanswer
 

falconn a écrit :

la règle de 3?


c'est un nouvel algo qui vient de sortir :D
 
(c'est pour rigoler, hein)

n°329209
gfive
Posté le 11-03-2003 à 09:05:53  profilanswer
 

El_gringo a écrit :


 
Paf, planté ! :D


 
mais...mais...beuuuuuh!! J'te mewde, d'abord!! :p
 
(T'en a déjà vu, des argumentations comme ça?? Noooon mais, attends avant 9h du mat, je demande un droit de plantage!)

n°329237
BifaceMcLe​OD
The HighGlandeur
Posté le 11-03-2003 à 09:43:29  profilanswer
 

Attention au phénomène de "pixellisation" si le facteur de zoom demandé est trop grand. Je ne sais pas si ce phénomène a du sens dans ton cas, mais s'il en a, il va falloir non pas simplement recopier les valeurs, mais en créer en interpolant les valeurs existantes.

n°329260
benou
Posté le 11-03-2003 à 10:10:50  profilanswer
 

c'est un peu ce que gfive a dit non ??

n°329295
souk
Tourist
Posté le 11-03-2003 à 10:42:24  profilanswer
 

pour une interpollation bicubique, y a mon pote google qui m'a trouve ca, y a la formule toute faite pour combler les vides de la grande matrice
 
 http://astronomy.swin.edu.au/~pbourke/colour/bicubic/
 
en esperant que ca t'aide   :hello:

n°329315
gfive
Posté le 11-03-2003 à 10:57:51  profilanswer
 

benou a écrit :

c'est un peu ce que gfive a dit non ??


Euuh, bah non, je parlais du problème en cas de structure de données à la con :  
 
J'ai vu des gens coder des images comme ça :  
 
[cpp]
byte[] pixels;
int width;
/cpp]  
 
Du coup, le tableau pixels fait width*height cases....Avec un bordel de ce genre, le calcul de la case où mettre une valeur d'interpolation, et celui des cases où prendre les valeurs de base poour l'interpolation est plus prise de tête que l'interpolation elle même, je suis sûr!!
 
Attends....Pour la case i, le pixel du dessus est à la case i-width, le pixel de droite est à i+1, sauf si (i mod (width - 1)) = 0 (bord de droit de l'image)....et width-1 parce que les indices commencent à 0..
 
Bref, le bonheur, quoi!! :p

n°329341
benou
Posté le 11-03-2003 à 11:17:18  profilanswer
 

bha ....

Code :
  1. public static byte get(byte[] tab, int x, y, int width) {
  2.    return tab[x + y*width];
  3. }

n°329385
BifaceMcLe​OD
The HighGlandeur
Posté le 11-03-2003 à 11:53:18  profilanswer
 

Merci à toi, souk : lL'interpolation bicubique est un algorithme classique très performant (c'est celui qu'on trouve dans Photoshop par exemple), et il marche beaucoup beaucoup mieux qu'une bête interpolation linéaire. A savoir quand même qu'il ne marche bien que jusqu'à un facteur de zoom 4x (2x en largeur, 2 fois en hauteur). Au-delà, l'effet de zoom se voit malgré tout, et il faut passer à des algorithmes beaucoup plus compliqués (genre ce que fait Genuine Fractals), mais là, je doute que tu trouves un algo dans le domaine public : tout doit être soumis à brevet dans tous les sens !  :(  
 
benou> Ton code ne compile pas, il manque un "int" dans le prototype... ;)

n°329401
the real m​oins moins
Posté le 11-03-2003 à 12:16:51  profilanswer
 

benou a écrit :


c'est un nouvel algo qui vient de sortir :D
 
(c'est pour rigoler, hein)

:o
n'empeche l'explication de gfive, certes plus comprehensible, est basée sur une regle de 3 :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°329581
benou
Posté le 11-03-2003 à 15:10:27  profilanswer
 

BifaceMcLeOD a écrit :


benou> Ton code ne compile pas, il manque un "int" dans le prototype... ;)


ha oui tiens ... :/

n°329584
chrisbk
-
Posté le 11-03-2003 à 15:14:53  profilanswer
 

BifaceMcLeOD a écrit :

Merci à toi, souk : lL'interpolation bicubique est un algorithme classique très performant (c'est celui qu'on trouve dans Photoshop par exemple), et il marche beaucoup beaucoup mieux qu'une bête interpolation linéaire. A savoir quand même qu'il ne marche bien que jusqu'à un facteur de zoom 4x (2x en largeur, 2 fois en hauteur). Au-delà, l'effet de zoom se voit malgré tout, et il faut passer à des algorithmes beaucoup plus compliqués (genre ce que fait Genuine Fractals), mais là, je doute que tu trouves un algo dans le domaine public : tout doit être soumis à brevet dans tous les sens !  :(  
 
benou> Ton code ne compile pas, il manque un "int" dans le prototype... ;)


 
pour ceux qui ont acces a de la litterature y'a un tres bon article dans graphics gem III pour ce genre de sport. C ce que j'ai utilise pour ma routine et ca me refile de tres bon resultats

n°329911
falconn
Posté le 11-03-2003 à 20:58:32  profilanswer
 

Hé ben vous êtes super actif sur ce forum :) c'est cool!  
Merci pour votre aide à tous !

n°330073
gfive
Posté le 11-03-2003 à 23:06:17  profilanswer
 

benou a écrit :

bha ....

Code :
  1. public static byte get(byte[] tab, int x, y, int width) {
  2.    return tab[x + y*width];
  3. }




 
Ah ouais....:D:D Kelkon!! :p

n°330144
souk
Tourist
Posté le 12-03-2003 à 03:57:03  profilanswer
 

gfive a écrit :


 
Ah ouais....:D:D Kelkon!! :p


 
bof, pas tant que ca, moi aussi j'ai toujours les boules de ce genre de chose, c'est tellement facile de se planter  :whistle:

n°330178
gfive
Posté le 12-03-2003 à 08:54:36  profilanswer
 

the real moins moins a écrit :

:o
n'empeche l'explication de gfive, certes plus comprehensible, est basée sur une regle de 3 :o


 
Ben ouais, mais mon truc sert juste à calculer les positions des points qui serviront de base à l'interpolation.....

n°330338
the real m​oins moins
Posté le 12-03-2003 à 11:55:59  profilanswer
 

gfive a écrit :


 
Ben ouais, mais mon truc sert juste à calculer les positions des points qui serviront de base à l'interpolation.....

mais j'ai pas dit que j'avais répondu quelquechose de très intelligent non plus :whistle:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°330536
gfive
Posté le 12-03-2003 à 14:05:52  profilanswer
 

the real moins moins a écrit :

mais j'ai pas dit que j'avais répondu quelquechose de très intelligent non plus :whistle:


 
:D:D Et pourtant, on est ni lundi, ni vendredi!! On bosse trop....

n°330624
gm_superst​ar
Appelez-moi Super
Posté le 12-03-2003 à 15:09:21  profilanswer
 

Sinon pour info, on peut faire ce genre de chose avec l'API standard mais ce sera du bilinéaire (un peu moins bon que le bicubique mais plus rapide).
 
En gros la démarche est la suivante :
 
- créer un WritableRaster à partir de la sélection de l'image de départ (rasterSource)
- créer un second WritableRaster à partir du premier mais avec les dimensions de l'image (rasterDestination)
- créer un objet AffineTransform qui se charge de transformer une image 2D en une autre image 2D (c'est une bête matrice 3x3)
- créer un objet AffineTransformOp qui se chargera d'appliquer le filtre sur rasterSource pour obtenir rasterDestination. C'est là qu'on choisit le mode d'interpolation : nearest neighbor (bof) ou bilinear.
- modifier l'image de départ avec rasterDestination.
 
 
J'avais fait un projet il y a quelques temps qui utilisait tout cela. Si ça t'intéresse je peux coller le code ici.
 
 
Edit: sinon il est sûrement possible de faire du bicubique avec JAI. A vérifier.


Message édité par gm_superstar le 12-03-2003 à 15:10:35

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java Général] fonction zoom

 

Sujets relatifs
php/java cookie[JAVA] Pb d'interfaçage avec SICStus Prolog sous XP
[biblio]Un bon bouquin sur les webservices et java?[java] imprimer 3 panels en 1 fois
fonction copy() grrrrrr pourquoi ça marche pas bon sang[JAVA] Pb de rafraichissement [resolu]
[java] [applet] changer le contenu...[java][applet]logging d'IP
[PHP] PB avec la fonction imagepng[java][Applet] Placer les composant où l'on souhaite [Resolu]
Plus de sujets relatifs à : [Java Général] fonction zoom


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR