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

Delphi Discussion :

Editeur d'image : Classe de gestion des images


Sujet :

Delphi

  1. #21
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Du peu que je connaisse c'est que les classes images derivees de TGraphics (TBitmap, TJpeg, etc ...) sont des classe qui fournissent methodes et property pour acceder et manipuler une zone memoire contenant l'image.

    Donc l'assign qui a pour but de copier les champs communs entre 2 classes, peut donc copier les champs d'un TJpegImage dans un TBitmap notement l'espace de stockage de l'image.
    C'est pour ca que l'on peux basculer d'un Jpeg vers un bmp et l'inverse.
    A noter que la methode DibNeeded ou JpegNeeded permet de compresser/Decompresser les donnees de la zone memoire en versio nbrut (BMP) ou Jpeg.

    Donc un assign sans DIBNeeded aui prealable entrainera une erreur lors de la manipulation, car l'image en memoire, copiees du TJepgImage vers le TBitmap ne sont pas compatible avec la manipulation type Bitmap.

  2. #22
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    C'est bien compliqué tout cela. Pour ce qui se passe réellement en mémoire je découvre ici plein de nuances. Par contre dès que j'ai la version .bmp qu'elle soit d'origine .bmp ou issue d'une conversion à partir de n'importe quel autre format-image je me contente des caractistiques du bmp et des scanlines.
    Merci pour l'info signalant qu'en plus du DibNeeded on a aussi le JpegNeeded : utile à savoir en cas de message d'erreur.
    A+

  3. #23
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Gilbert Geyer
    Merci pour l'info signalant qu'en plus du DibNeeded on a aussi le JpegNeeded : utile à savoir en cas de message d'erreur.
    JpegNeeded permet de comrpesser les données au format JPEG a partir des parametre du TJpegImage.
    C'ets ce qui permet en quelque sorte de repasser du BMP au Jpeg :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Var bmp : Bitmap;
      Jpg : TJpegImage;
     
    bmp.loadFromile(..);
    <config du JPG>
    jpg.assign(bmp);
    jpg.JpegNeeded;
    jpg.saveToFile(...);

  4. #24
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    "JpegNeeded : permet en quelque sorte de repasser du BMP au Jpeg" : Merci beaucoup : Utile pour économiser l'espace-sur-disque si on collectionne beaucoup d'images.

    Mais en final le choix de la classe pour la manipultation de tous les formats de fichiers-image évoqués dans ton premier message ça se précise ?
    A+

  5. #25
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Gilbert Geyer
    Mais en final le choix de la classe pour la manipultation de tous les formats de fichiers-image évoqués dans ton premier message ça se précise ?
    A+
    Ouaip .. je pense opter pour du TBitmap ... en attendant mieux.
    De toute facon le travail sur l'image necessite un format brut et non compressé .. alors quoi qu'il arrive je pert rien a passer par du bitmap.
    Une classe plus generique m'aurait juste permi d'y stocker directement l'instance de TJpegImage (par exemple) et d'y travailler comme sur un bitmap, sans pour autant creer uen instance de TBitmap, le TJpegImage (temporaire) servant juste au chargement/dechargement.

    Simple question de point de vue

  6. #26
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    je pense opter pour du TBitmap
    ... Vu.
    ... Et pour le /GIF/PNG/TGA également cités dans ton message du début ce sera pareil : conversion vers le BitMap ?
    A+

  7. #27
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Gilbert Geyer
    ... Et pour le /GIF/PNG/TGA également cités dans ton message du début ce sera pareil : conversion vers le BitMap ?
    Oui, le principe est d'avoir uen classe unique sur laquelle se repose tous les traitements a effectuer dessus.
    L'ideal etait une classe parente de toutes ces classses (TGraphic ?) ou conteneur de ces classes (TPicture ?) mais a defaut, prenons la classe que j'apelle standard vers laquelle il semblerais que toutes puissent etre convertit : TBitmap.

    Eventuelement, pourquoi pas creer ma propre classe basée sur une matrice de pixels ...... permettant juste de stocker les donées des pixels.

    A voir avec le temps.
    Je me donne encore quelques semaines pour reflechir au probleme

  8. #28
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-bonjour,

    Clorish a écrit:
    Eventuelement, pourquoi pas creer ma propre classe basée sur une matrice de pixels ...... permettant juste de stocker les données des pixels.
    ... oui pourquoi pas ... mais n'est-ce-pas une manière de réinventer les scanlines ? Comme l'aide Delphi dit au sujet des scalines:
    Offre un accès indicé à chaque ligne de pixels.

    property ScanLine[Row: Integer]: Pointer;

    Description

    ScanLine n'est utilisée qu'avec les DIB (Device Independent Bitmaps) pour les outils d'édition d'images manipulant les pixels à un bas niveau.
    ça risque d'être dur de faire mieux. Un tableau de lignes de scanlines ne suffirait-t-il pas?
    A+

  9. #29
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Gilbert Geyer
    Re-bonjour,


    ... oui pourquoi pas ... mais n'est-ce-pas une manière de réinventer les scanlines ? Comme l'aide Delphi dit au sujet des scalines:

    ça risque d'être dur de faire mieux. Un tableau de lignes de scanlines ne suffirait-t-il pas?
    Oui surement
    Mais c'ets pour etre indepedant de tout format.
    A voir ....
    Quand a un array of Scnalines, je veux bien mais de ce que je sais ca ne permet qu'une chose : acceder de maniere indexée aux données d'une ligne de pixels.
    Aun array of pixels fait pas mieux ... mais pas vraiement moins bien (peut etre niveau methode d'access ...) car c'est aussi un format d'acces indexé aux pixels

  10. #30
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Mais c'ets pour etre indepedant de tout format.
    ... en fait avec un classe basée sur une matrice de pixels on est de toutes façons obligé de convertir tous les formats (BMP, JPEG, etc) vers cette matrice.
    ... et comme dans un tableau de Scanlines, la matrice de pixels ne permet qu'une chose : acceder de maniere indexée aux pixels.
    ... y'a peut-être une nuance en faveur de la matrice qui m'échappe.
    A+

  11. #31
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Gilbert Geyer
    ... y'a peut-être une nuance en faveur de la matrice qui m'échappe.
    Une gestion optimisée des appels aux instruction ASM et de l'usage du processeur ?
    Un acces direct a la zone memoire des données DIB ?

    [Edit] Desolé j'ai mal lut le message.
    Non il n'y a pas de nuance particuliere.
    Si j'opte pour la matrice c'est pour etre autonome et independant des format de fichiers et eventuelement de classes de gestions des images que je programmerais.
    Scanline n'est accessible que par DIB, et sous TBitmap donc cela implique la conversion de tout images sous forme de JPEG ou au format DIB.
    De plus la classe Bitmap est peut etre limitante dans certains cas ....

  12. #32
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,
    Clorish a écrit:
    Si j'opte pour la matrice c'est pour etre autonome et independant des format de fichiers et eventuelement de classes de gestions des images que je programmerais.
    ... c'est justement cette notion d'indépendance par rapport aux formats de fichiers que je n'arrive pas à comprendre puisqu'il faut bien alimenter la matrice de pixels à partir des fichiers-image qui ont des formats différents.
    Je comprendrais si l'objectif était de faire un logiciel de dessin où c'est le dessinateur qui crée le dessin et qui alimenterait la matrice avec ses pixels à lui.
    A+

  13. #33
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par Gilbert Geyer
    ... c'est justement cette notion d'indépendance par rapport aux formats de fichiers que je n'arrive pas à comprendre puisqu'il faut bien alimenter la matrice de pixels à partir des fichiers-image qui ont des formats différents.
    Je comprendrais si l'objectif était de faire un logiciel de dessin où c'est le dessinateur qui crée le dessin et qui alimenterait la matrice avec ses pixels à lui.
    L'independance n'est pas directement lié aux formats du fichier mais aux classes qui le manipule.
    La classe TBitmap gere des fichiers au format bitmap et non une image independement de sont format.
    Si le format Bitmap est tres tres proche d'une matrice de pixels contrairement a d'autres formats, il n'en est pas moins specialisé pour le format Bitmap.

    LA classe TButton est un Bouton mais lié a une certaine vision des boutons.
    MAis elle n'ets pas adaptée pour creer des boutons au design plus suptile a base d'images.
    Il faut donc deriver une classe de TCustomButton voir encore plus haut TControl, qui heureusement contient l'essence de ce qui fait un bouton (evenements clics essentielement) independement de son mode d'affichage.

    Ce qui definie une image c'est sa matrice de pixels.
    La classe de base de toutes images est donc une matrice de pixels.
    Ensuite, on peut deriver toutes sourtes de classes proposant des apis de traitement, puis encore plus bas des classes de gestions de formats de fichiers, suceptible de coder/decoder cette matrice de pixels vers/depuis le format souhaité.

    Bon je m'egare un peu ... ca ca reste l'ideal
    Mais comme je ne vais pas non plus reinventer la roue ... je pense que la classe TBitmap suffira.
    Par contre une telle facon de pensee me permet de faire les bon choix entre ideal et realisme, en tenant compte du temps de production, de mes competences, et de l'efficacitée du code produit.

  14. #34
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    L'independance n'est pas directement lié aux formats du fichier mais aux classes qui le manipule.
    ... pigé la nuance.

    Mais comme je ne vais pas non plus reinventer la roue ... je pense que la classe TBitmap suffira.
    Par contre une telle facon de pensee me permet de faire les bon choix entre ideal et realisme, en tenant compte du temps de production, de mes competences, et de l'efficacitée du code produit.
    ... absolument d'accord, et en prime du TBitmap tu peux trouver plein de codes déjà cogités pour le TBitmap car même sans faire du copier-coller il y a plein d'exemples qui sont modifiables pour les personnaliser à partir d'une base qui marche.
    A+

  15. #35
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Points : 107
    Points
    107
    Par défaut
    Citation Envoyé par Clorish
    Ce qui definie une image c'est sa matrice de pixels.
    La classe de base de toutes images est donc une matrice de pixels.
    ... je pense que la classe TBitmap suffira.
    Un pixel RGB c'est 3 octets en mémoire, RGBA c'est 4. Une classe TBitmap c'est notamment un tableau de pixels, triplets ou quadruplets de ce type.

    Si on veut travailler sur la forme la plus accessible d'une image, il faut évidemment choisir TBitmap et utiliser Scanline qui permet d'accéder à chaque couleur et à la couche alpha de chaque pixel si elle existe.

  16. #36
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par jcs2
    Un pixel RGB c'est 3 octets en mémoire, RGBA c'est 4. Une classe TBitmap c'est notamment un tableau de pixels, triplets ou quadruplets de ce type.
    Tout a fait.
    Du coup, une matrice de TRGB ou TRGBA reviens au meme .... sauf que c'ets independant de la classe TBitmap.
    Ca a ses avantages et ses inconvenients.
    A voir .....

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/01/2006, 10h18
  2. Classe de gestion des images
    Par tlemcenvisit dans le forum MFC
    Réponses: 2
    Dernier message: 03/05/2005, 19h07
  3. Class de gestion des images avec rotation
    Par Johnny Boy dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 11h54
  4. [TP]Gestion des images bmp avec BMP.TPU
    Par Gabi dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 14/05/2004, 23h20

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