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

Traitement d'images Discussion :

Redimensionner une image - proportions et tailles maximales à respecter


Sujet :

Traitement d'images

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Informaticien - Profesionnal master application development
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien - Profesionnal master application development
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut Redimensionner une image - proportions et tailles maximales à respecter
    Bonjour à tous,

    Je suis actuellement dans un projet C++/CLI et je dois exporter des images de tailles différentes dans des documents Word que je génère.

    Ces images doivent être redimensionner (+ ou - de width/height) afin d'être les plus grande possible tout en veillant à ne pas dépasser la largeur ou la hauteur maximale du document Word (maxHdocWord/maxWdocWord).

    Il est donc notion de :
    • actWidth
    • actHeight
    • destWidth
    • destHeight
    • maxWidth
    • maxHeight
    • ratioBetweenHW


    De plus les images sources peuvent être plus grande que la taille maximale et dans ce cas il faudra les réduire le moins possible. Et encore, les tailles sources sont en Pixel et dans le document Word je devrais spécifier leur taille en EMU's mais ça n'à pas trop d'importance pour le moment, il faut déjà que je puisse déterminer leur taille maximal en Pixel.

    Il y a beaucoup d'exemples sur le net mais il n'y à souvent pas la notion de taille maximale à respecter. J'ai bien des idées mais mon code risque d'être une succession de conditions.

    Pourriez-vous m'aiguiller afin que le code soit au mieux optimisé pour réaliser ce redimensionnement ?

    Merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Informaticien - Profesionnal master application development
    Inscrit en
    Octobre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien - Profesionnal master application development
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 47
    Points : 32
    Points
    32
    Par défaut
    Code C++ : 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
     
    	                float maxWidth  = 950;//9080500;//(715 * 914400) / 72; // (max 715)       9'080'500   //12'700
    			float maxHeight = 670;//6350000;//(670 * 914400) / 72; // (max 670)  715-> 9'080'500
     
    			Image^ image = Image::FromFile(fileName);
    				float originalWidth  = image->Width;//(image->Height * 914400) / image->VerticalResolution;
    				float originalHeight = image->Height;//(image->Width * 914400) / image->VerticalResolution;
     
     
    			float percentWidth = maxWidth / originalWidth;    // 9'080'500 / 800 = 11'350.625
    			float percentHeight = maxHeight / originalHeight; // 9'080'500 / 600 = 15'134.166
    			float percent = percentHeight < percentWidth ? percentHeight : percentWidth; //percentHeight
     
    			float newWidth  = ((originalWidth * percent)*914400)/image->HorizontalResolution;   // 12'107'332.8 MAXIMUM
    			float newHeight = ((originalHeight * percent)*914400)/image->VerticalResolution; //  9'080'499.6
    			delete image;

    Ce code semble fonctionner exception faite pour les image plus haute que large (en portrait).

    ?

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Déjà une erreur dans les commentaires là :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	float originalWidth  = image->Width;//(image->Height * 914400) / image->VerticalResolution;
    	float originalHeight = image->Height;//(image->Width * 914400) / image->VerticalResolution;
    D'autre part, pourquoi prends-tu en compte la résolution ??


    • Tu as une image W*H
    • Tu as un écran ww*hh
    • Tu as ton facteur (percent)



    pour chaque pixel de l'image (en partant du centre), tu dois calculer où il arrive dans la sortie (en pratique on fait l'inverse, pour ne pas avoir d'effets de moires ou de trous)

    Le pseudo-algo est donc :

    • calculer la position du centre de la nouvelle image
    • pour tout (i,j) de la nouvelle image, calculer le (i',j') de l'ancienne.
    • Copier le pixel (i',j') dans (i,j).
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

Discussions similaires

  1. redimensionner une image selon la taille de jlabel
    Par titeufdev dans le forum Composants
    Réponses: 2
    Dernier message: 06/04/2011, 10h21
  2. [GD] Redimensionner une image avec une taille fixe
    Par Aspic dans le forum Bibliothèques et frameworks
    Réponses: 29
    Dernier message: 20/07/2008, 14h57
  3. Réponses: 2
    Dernier message: 01/05/2008, 11h03
  4. Réponses: 3
    Dernier message: 12/12/2007, 15h44
  5. Réponses: 6
    Dernier message: 03/11/2007, 23h03

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