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;
Partager