PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > nzn.fr.delphi > Savoir si un jpg est en niveau de gris sans tout charger
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Savoir si un jpg est en niveau de gris sans tout charger

Réponse
 
LinkBack Outils de la discussion
Vieux 09/01/2008, 18h26   #1
Eric S
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Savoir si un jpg est en niveau de gris sans tout charger

Bonsoir,

J'ai des fichiers jpeg dont certains correspondent à des images en
niveau de gris. Je voudrais déterminer les fichiers concernés sans
devoir charger l'image complète. En cherchant dans les archives, j'ai
déjà trouvé un code qui lit directement les largeurs et hauteurs dans
l'en-tête. Mais rien sur l'aspect couleur<>noir et blanc.

Si vous avez des idées...

Eric
  Réponse avec citation
Vieux 09/01/2008, 20h34   #2
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Savoir si un jpg est en niveau de gris sans tout charger

Eric S a écrit :
> Bonsoir,
>
> J'ai des fichiers jpeg dont certains correspondent à des images en
> niveau de gris. Je voudrais déterminer les fichiers concernés sans
> devoir charger l'image complète. En cherchant dans les archives, j'ai
> déjà trouvé un code qui lit directement les largeurs et hauteurs dans
> l'en-tête. Mais rien sur l'aspect couleur<>noir et blanc.
>
> Si vous avez des idées...
>
> Eric


A la sauvegarde d'une image scannée en dégradé de gris, Paint Shop Pro signale
qu'il doit la convertir en 32 bits pour pouvoir la sauver en jpg/jpeg.

J'en conclus que le JPG est forcément en 32 bits et qu'en conséquence il n'y a
probablement de descripteur pour indiquer qu'elle n'exploite que des gris.

  Réponse avec citation
Vieux 09/01/2008, 21h59   #3
Eric S
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Savoir si un jpg est en niveau de gris sans tout charger

Ben justement, si, ça ne doit pas être pareil. Parce que quand je les
lis avec Intel Jpeg Library, ça ne marche pas avec celles en niveaux de
gris. De plus, The Gimp ne me demande pas de reconvertir en RVB pour les
enregistrer. Et à la ré-ouverture, elles sont toujours en niveaux de gris.

Normalement, il y a quelque part dans l'entête jpeg un byte qui dit :

number of components (1 = grayscale, 3 = RGB)


Pour revenir à mes recherches précédentes, j'avais pris le code que
Dav999 avait mis le 23.04.2004 à 18:46:09 sur le newsgroup. Ça lisait
largeur et hauteur. En prenant le byte d'après, ça me fait aussi le 1 ou
3 de la couleur. Sauf que le code donne des résultats erronés pour
largeur/hauteur dans certains cas. Donc, en plus, je veux de nouveau
largeur et hauteur.

Je continue mes recherches...

Eric
  Réponse avec citation
Vieux 10/01/2008, 08h18   #4
Pascal Peyremorte
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Savoir si un jpg est en niveau de gris sans tout charger

Eric S a écrit :
> Ben justement, si, ça ne doit pas être pareil. Parce que quand je les
> lis avec Intel Jpeg Library, ça ne marche pas avec celles en niveaux de
> gris. De plus, The Gimp ne me demande pas de reconvertir en RVB pour les
> enregistrer. Et à la ré-ouverture, elles sont toujours en niveaux de gris.
>
> Normalement, il y a quelque part dans l'entête jpeg un byte qui dit :
>
> number of components (1 = grayscale, 3 = RGB)
>
>
> Pour revenir à mes recherches précédentes, j'avais pris le code que
> Dav999 avait mis le 23.04.2004 à 18:46:09 sur le newsgroup. Ça lisait
> largeur et hauteur. En prenant le byte d'après, ça me fait aussi le 1 ou
> 3 de la couleur. Sauf que le code donne des résultats erronés pour
> largeur/hauteur dans certains cas. Donc, en plus, je veux de nouveau
> largeur et hauteur.
>
> Je continue mes recherches...
>
> Eric


Errare humanum est (mais sans persévérer) : il y a bien un marqueur pour avoir
si la composante Y (=luminosité = niveau de gris) est seule ou accompagnée de Cb
et Cr (données sur couleurs)

Voici la description du début d'un fichier JPEG, tiré de la description de
fichier trouvée sur www.wotsit.org (jfif.zip):


<<<
The syntax of a JFIF file conforms to the syntax for interchange format defined
in Annex B of ISO DIS 10918-1. In addition, a JFIF file uses APP0 marker
segments and constrains certain parameters in the frame header as defined below.

X'FF', SOI
X'FF', APP0, length, identifier, version, units, Xdensity, Ydensity,
Xthumbnail, Ythumbnail, (RGB)n


length (2 bytes) Total APP0 field byte count, including the byte
count value (2 bytes), but excluding the APP0 marker
itself

identifier (5 bytes) = X'4A', X'46', X'49', X'46', X'00'
This zero terminated string ("JFIF") uniquely identifies this APP0
marker. This string shall have zero parity (bit 7=0).

version (2 bytes) = X'0102' The most significant byte is used for major
revisions, the least significant byte for minor revisions.
Version 1.02 is the current released revision.

units (1 byte) Units for the X and Y densities.
units = 0: no units, X and Y specify the pixel aspect ratio
units = 1: X and Y are dots per inch
units = 2: X and Y are dots per cm

Xdensity (2 bytes) Horizontal pixel density
Ydensity (2 bytes) Vertical pixel density
Xthumbnail (1 byte) Thumbnail horizontal pixel count
Ythumbnail (1 byte) Thumbnail vertical pixel count
(RGB)n (3n bytes) Packed (24-bit) RGB values for the thumbnail pixels,
n = Xthumbnail * Ythumbnail

[ Optional JFIF extension APP0 marker segment(s) - see below ]
o
o
o
X'FF', SOFn, length, frame parameters
Number of components Nf = 1 or 3
1st component C1 = 1 = Y component
2nd component C2 = 2 = Cb component
3rd component C3 = 3 = Cr component
o
o
o
X'FF', EOI
>>>



  Réponse avec citation
Vieux 10/01/2008, 20h05   #5
Eric S
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Savoir si un jpg est en niveau de gris sans tout charger

> Voici la description du début d'un fichier JPEG, tiré de la description
> de fichier trouvée sur www.wotsit.org (jfif.zip):


Ça faisait un moment que je n'avais pas trainé sur ce site. J'ai
téléchargé une autre doc : itu-1150PDF.zip

Ça m'a permis de comprendre comment étaient organisées les frames dans
les fichiers jpeg et en particulier de retrouver celle contenant les
informations qui m'intéressaient.

En m'inspirant du code déjà trouvé, ça donne le code mis à la fin. Je
vais encore faire quelques tests pour vérifier que c'est bon mais à
priori, c'est bon.

Merci

Éric


/***********************/


function JPEGDimensions2(Filename : string; var X, Y : Word; var Colored
: boolean) : boolean;
var
W : word;
b : byte;
found : boolean;
begin
Result := False;
with TFileStream.Create(filename, fmOpenRead or fmShareDenyNone) do
begin
try
Position := 0;
Read(W, 2);
if (W <>$D8FF) then
exit;
found := false;

repeat
read(b,1);
if b<>$FF then
begin
while b=0 do // in some jpeg from Photoshop there is a bunch
of $00 at the end of the frame before the next frame header
read(b,1);
if b<>$FF then
exit;
end;
read(b,1);
if (b in [$C0, $C1, $C2]) then
begin // found, reading values
found := true;
Position:=Position+3;
Read(Y, 2);
Read(X, 2);
X := Swap(X);
Y := Swap(Y);
read(b,1);
Colored:=(b=3);
end
else
begin // not found, going to next frame header
read(W,2);
W :=swap(W);
Position:= Position + W - 2;
end;
until found;
Result := true;
finally
Free;
end; {try}
end; {with}
end; {JPEGDimensions2}
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 04h39.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,11841 seconds with 13 queries