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 :

Tentative de charger / utiliser une image monochrome 16 bit de gris dans Delphi


Sujet :

Delphi

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut Tentative de charger / utiliser une image monochrome 16 bit de gris dans Delphi
    Bonjour,
    dan un nouveau freeware, je cherche à charger une image monochrome PNG 16 bit de gris, obtenue par capture et registration du Soleil en H-Alpha pour effectuer des traitements (masques, gamma, etc...) en 16 bit.

    Malgré mes nombreuses tentatives en utilisant Graphics32 et l'aide de l'IA je n'y arrive pas car arrive toujours une erreur du style
    "Erreur lors du chargement de l'image : Violation d'accès à l'adresse 00AC76F6 dans le module 'SunImageProcessor.exe'. Lecture de l'adresse 00000000"

    Les images existent, sont présentes dans le chemin, je peux les charger dans certains logiciels d'astronomie et elle sont bien en tons de gris 16 bit (0, 0..65000, 0) et graphics32 est fonctionnel (testé par le programme).

    je joins une toute petite image pour test en 16 bit (56 Ko).

    Ci-dessous la procedure qui échoue instantanément à la tentative de chargement de l'image, sans autres messages préalables à l'erreur ...
    LoadedBitmap.LoadFromFile(OpenDialogImage.FileName); // Charger l'image sélectionnée
    debug:
    Sortie du Thread : ID du thread : 8216. Processus SunlmageProcessorexe (5343)
    Exception 'first chance‘ à S778FB282. Classe d'exception EAccessViolation avec un message ‘Violation d'accès à l'adresse 00AC76F6 dans le module 'SunlmageProcessor.exe'. Lecture de l'adresse 00000000‘. Processus SunImageProcessor.exe (5340)

    Ce serai super si le problème probablement complexe (travail en 16 bit) pouvait être résolu par l'un de vous car ce programme envisagé ouvrirai de nouvelles perspectives aux astronautes amateurs étudiant le Soleil !
    Plus d'infos, n'hésitez pas ! Merci d'avance!

    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
    procedure TSolarImageProcessorForm.LoadImage(const FileName: string);
    var
      PNG: TPngImage;
      Bitmap32: TBitmap32;
      x, y: Integer;
      GrayValue: Word;
    begin
      // Vérification de l'existence du fichier
      if not FileExists(FileName) then
      begin
        ShowMessage('Erreur : Fichier introuvable à ' + FileName);
        Exit;
      end;
     
      PNG := TPngImage.Create;
      Bitmap32 := TBitmap32.Create;
      try
        // Chargement du fichier PNG
        ShowMessage('Chargement du fichier PNG');
        Application.ProcessMessages;
        PNG.LoadFromFile(FileName);
     
        // Initialisation de Bitmap32 aux dimensions de l'image
        Bitmap32.SetSize(PNG.Width, PNG.Height);
     
        // Copie des pixels 16 bits dans Bitmap32
        ShowMessage('Copie des pixels 16 bits dans Bitmap32');
        Application.ProcessMessages;
        for y := 0 to PNG.Height - 1 do
        begin
          for x := 0 to PNG.Width - 1 do
          begin
            // Exemple de récupération de la valeur 16 bits (tonalités de gris)
            // Assurez-vous que `Pixels[x, y]` retourne bien un mot 16 bits
            GrayValue := (PNG.Pixels[x, y] and $FFFF);
     
            // Stockage direct dans Bitmap32 avec les valeurs 16 bits intactes
            Bitmap32.Pixel[x, y] := GR32.Color32(GrayValue and $FFFF, GrayValue and $FFFF, GrayValue and $FFFF, 255);
          end;
        end;
     
        // Affichage de l'image dans le composant ImageDisplay
        ShowMessage('Affectation à ImageDisplay');
        Application.ProcessMessages;
        ImageDisplay.Picture.Bitmap.Assign(Bitmap32);
        ShowMessage('Image chargée et affichée avec succès.');
        Application.ProcessMessages;
     
      finally
        // Libération des ressources
        Bitmap32.Free;
        PNG.Free;
      end;
    end;
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/01/2007, 10h09
  2. Utiliser une image DirectX avec GDI?
    Par Fynchi dans le forum DirectX
    Réponses: 11
    Dernier message: 02/11/2006, 09h36
  3. Réponses: 1
    Dernier message: 17/05/2006, 09h19
  4. Utiliser une image à la place du curseur par défaut
    Par nice dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 11/12/2005, 22h15
  5. Utilise une image ISO pour le boot du PC
    Par Furius dans le forum Ordinateurs
    Réponses: 2
    Dernier message: 05/09/2005, 14h02

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