Vérification d'étendue avec Scanline
Bonjour à tous,
'Delphi7, version Education Professionnelle sur Windows 7)
Dans une même application, dans une première procédure j'utilise la fonction
Scanline ainsi :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Var P:PByteArray;
X,Y:Integer;
Begin
For Y:= bitmap1.height downto bitmap1.height-300 do
begin
P:=PByteArray(bitmap1.scanline[Y]);
for x:=2 to bitmap1.Width-2800 do
begin
P[X]:=Y;
.......
....... |
et tout se passe bien.
de suite après, j'utilise à la suite une seconde procédure avec la même construction :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Var P:PByteArray;
X,Y:Integer;
begin
DivMod(bitmap1.width,2,resultat,reste);
X:=resultat;
for Y:=bitmap1.height downto bitmap1.height-250 do
begin
P:=PByteArray(bitmap1.scanline[Y]);
P[X]:=Y;
.......
....... |
et je reçois le message d'erreur "exception ERangeError avec le message Erreur
vérification d'étendue".
Je peux supposer que je manque de mémoire mon bitmap1 comportant 3292 X 2172
pixels.
Comment résoudre ce problème ? je ne sais pas initialiser ce Pointeur P entre chaque
procedure; Il devrait l'être par le lancement de la nouvelle ?
Merci à vous de me guider.
Verification d'étendue avec Scanline
Voici mon code de création de bitmap
Code:
1 2 3 4
| Image.Picture.Assign(image1.picture.graphic);
Bitmap1:=Tbitmap.Create;
Bitmap1.pixelformat:= pf24bit;
Bitmap1.Assign(image.picture.graphic); |
je ne sais pas si cela va correspondre à du 256 couleurs.
par ailleurs j'ai toujours le même problème en remplaçant
"Bitmap1.height" par "Bitmap1.height-1"
Code:
1 2 3 4 5 6 7
| Y:=1000;
for X:=bitmap1.Width-1 downto bitmap1.Width-250 do
begin
P:=PByteArray(bitmap.scanline[Y]);
P[X]:=Y;
........
........ |
Vérification d'étendue avec Scanline
Re..Bonjour,
Merci de vous pencher sur ce problème.
j'ai inversé les deux lignes de code comme indiqué.
Toujours le même problème.
Pour ce qui est de remplacer "P:PByteArray;"
par "P:PRGBTriple;" je ne sais pas comment l'utiliser dans le code. Pouvez-vous m'adresser la ligne de code à programmer pout ce faire.
Ce que je souhaite faire : je prends 1 photo ".JPG" et je la convertis en Bitmap.
Dans la première procédure je cherche les valeurs R G B du fond de la photo.
Là mon code P[X]=Y passe très bien.
Dans la seconde procédure je cherche à détecter les pixels couleurs
d'une ligne médiane horizontale (ou verticale) selon orientation de la photo
pour trouver l'abscisse (ou l'ordonnée) de l'objet en photo par le changement
de couleur des pixels.
Serait-ce un problème de mémoire ?
Vérification d'étendue avec scanline
Merci pour toutes vos explications.
Elles m'ont été très utiles
Et maintenant je viens de revoir mon code.
Tout marche.