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

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Pascal] nombre limite de valeurs en pointeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Pascal] nombre limite de valeurs en pointeurs

n°125446
JBs
Posté le 13-04-2002 à 01:36:05  profilanswer
 

Bonsoir, je dois stocker dans un programme pascal (si si ca existe encore :p) des images 36*36 pixels dans des pointeurs.
 
Cela represente environ 1200 valeurs par image à garder dans des pointeurs. Tout en sachant qu'il y a 25 images environ a stocker :p
 
Le probleme c'est que des que j'aim mis 8 images en memoire, le PC commence à peiner, 9 c'est fini, j'ai le droit a une belle erreur Heap Over Flow.
 
Est ce qu'il existe pas un moyen plus simple pour augmenter le nombre max de valeurs que l'on peut stocker dans des pointeurs ?
Ou est est ce que qqun aurait une idée sur la maniere de stocker les 1200 valeurs d'une image en memoire alliant pointeurs et autre type de variable ?
 
(C pour un projet info scolaire t il faut utiliser les pointeurs deds:))
 
PS : les images sont lues pixel par pixel et je stocke la valeur de la couleur d'un pixel en memoire (c'est pour cela qu'il y a 1200 valeurs dans par image).
 
 
Merci d'avance !

mood
Publicité
Posté le 13-04-2002 à 01:36:05  profilanswer
 

n°125448
gilou
Modérateur
Modzilla
Posté le 13-04-2002 à 01:55:04  profilanswer
 

Ben tu fait un pointeur qui pointe au debut de ton image.
De quoi as tu besoin en plus si tu connais le structure de donnée?
Tu alloues la taille necessaire pour contenir ton image
(taille du header + (nb de lignes*nb de pts par ligne*nb d'octet par pixel)) et tu pointes au debut.
Supposant que tu as une image 1200*1200*4 (1 octet par couleur+1 en rab pour des flags) ca te fait: 5Megs par image environ.
Pour 9 images, ca te bouffe environ 45 Megs de memoire.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°125451
JBs
Posté le 13-04-2002 à 02:02:50  profilanswer
 

oui mais la c pas le cas.
C'est des images 36*36 16 couleurs (classique sous TP).
Le prob c qu'apres 8 images alouées dans les pointeurs soit (8*1297 = 10376 pointeurs aloués) si j'essaye d'ajouter une 9ieme image, j'ai une erreur ...
 
Ya qu'un nombre de 1 à 16 stocké dans chaque pointeur. (format byte) normalement ca devrait pas faire 45 MB :p
Mais bon, ca passe po :(

n°125455
gilou
Modérateur
Modzilla
Posté le 13-04-2002 à 02:51:26  profilanswer
 

Mais pourquoi faire un pointeur par pixel?
Tu as lu ce que je t'ai ecrit??
Un pointeur devrait suffire en tout et pour tout par image.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°125456
gilou
Modérateur
Modzilla
Posté le 13-04-2002 à 03:02:58  profilanswer
 

JBs a écrit a écrit :

oui mais la c pas le cas.
C'est des images 36*36 16 couleurs (classique sous TP).
Le prob c qu'apres 8 images alouées dans les pointeurs soit (8*1297 = 10376 pointeurs aloués) si j'essaye d'ajouter une 9ieme image, j'ai une erreur ...
 
Ya qu'un nombre de 1 à 16 stocké dans chaque pointeur. (format byte) normalement ca devrait pas faire 45 MB :p
Mais bon, ca passe po :(  




Dans ce que je te disais, il suffisait d'adapter la formule:
36*36*1 ca fait 1296 octets par image.
Il suffit donc d'un pointeur pointant sur une zone de taille 1296 pour stocker une de tes images, soit un petit peu plus que 1Ko. Tu devrais pouvoir avoir bien plus de 9 images (environ 10k) en memoire.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°125457
JBs
Posté le 13-04-2002 à 03:49:57  profilanswer
 

ouais mais la, ca depasse mes compétances :(
 
J'ai uniquement vu le stockage de donnée dans un pointeur, apres pour savoir cb de memoire allouer a un pointeu ou un autre, c po faire :(
 
En fait ce que tu essaye de me faire comprendre c de mettre les 1200 valeurs correspondant aux couleurs des pixels dans un seul et unique pointeur au lieu de faire un pointeur par pixel ?
 
 
Voila comment je procede actuellement : (Peux pas faire copier/coller domage :( )
Une image : 34*34 pixels
Elle est stockée dans un fichier texte imgX.dat
 
Je lis le fichier
for i:=1 to 34 do
  for j:=1 to 34 do
    news(courant);
    read(fichier,courant^.newpixel);
    precedant^.suivant:=courant;
    precedant:=courant;
end;
La l'assignation pixel / pixel d'une image est faite a raison d'un pixel par pointeur.
 
Apres, qd je dois reaffciher l'image dans le programme, j'ai la premiere valeur du pointeur stockée dans un tableau et je l'appelle dans une boucle un peu comme ci-dessus.
 
 
ps : mes connaissances se limitent a l'apprentissage scolaire.

n°125458
gilou
Modérateur
Modzilla
Posté le 13-04-2002 à 06:02:33  profilanswer
 

Bon, mon pascal est SGDG, car ca fait un bail que j'en ai pas fait, mais je ferais un truc du genre:
 
Tu declare des variables:
image: array [1..1296] of Byte;  
p: ^Byte;
i: Integer;
 
Tu fait pointer le pointeur au debut du tableau:
p := @image[1];  
 
Tu remplis et incrementes le pointeur:
for i:=1 to 1296 do  
read(fichier,p^);
Inc(p);
end;
 
 
 
Notes qu'il etait aussi simple de faire:
for i:=1 to 1296 do  
read(fichier,image[i]);
end;
Mais bon, puisque tu as l'air de vouloir utiliser un pointeur...
 
Un truc vraiment dynamique serait:
type
  Image = array [1 .. 1296] of Byte;
  ImgPtr = ^Image;
 
 
var
  p, aux: ImgPtr;
 
 
begin
  GetMem (p, 1296 * SizeOf (Byte));
  aux := p;
  for i:=1 to 1296 do  
  read(fichier,aux^);
  Inc(aux);
  end;
  ......
  // Tu peux maniper l'image avec p qui pointe au debut et aux
  //avec des boucles:
  // aux := p;
  // for i:=1 to 1296 do  
  // manip_du_pixel(aux^);
  // Inc(aux);
  // end;
 
  // et quand tu as plus besoin de l'image:
  FreeMem(p, 1296 * SizeOf (Byte));
end;
 
J'ai ete voir la page du gnu-pascal ( http://www.gnu-pascal.de/gpc_toc.html ) avant de te repondre, car j'en avais oublie la syntaxe pour les pointeurs.
A+,

 

[jfdsdjhfuetppo]--Message édité par gilou--[/jfdsdjhfuetppo]


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°125509
JBs
Posté le 13-04-2002 à 13:52:33  profilanswer
 

Merci Gilou !
Je v tester ca de suite !
 
(Je suis obligé de passer par les pointeurs car ca fait parti de la grille d'evaluation du projet info et faut en retirer le max de points :p)

n°125531
JBs
Posté le 13-04-2002 à 16:53:08  profilanswer
 

Bon j'ai essayé Gilou, j'ai trouve une solution ... enfin partiellement quoi.
Je stocke les lignes completes d'une image dans un tableau lui meme dans un pointeur le prob c que une ligne sur 2 est toute noire, et je pige pas pk :(
 
Merci pour ton aide en tout cas !  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Pascal] nombre limite de valeurs en pointeurs

 

Sujets relatifs
[Pascal] Type de variables[PHP] Récupération des valeurs d'un formulaire
[PASCAL] fonction val[Algo] et [turbo Pascal]
[pascal] changer la police[HTML] Limite d'une TEXTAREA??????
Pascal : timer + overflow error[C] Nombre de chiffre dans un nombre
installation de turbo pascal mal passée[Open GL] travailler en Pascal, en C ou en C++, ça change qq chose ?
Plus de sujets relatifs à : [Pascal] nombre limite de valeurs en pointeurs


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