
Envoyé par
Jipété
Voilà ce que je trouve dans le fichier gif89a.txt, concernant le
Graphic Control Extension ligne 1218 et suivantes :
1 2 3 4 5 6 7 8 9 10
| 4 | | Transparent Color Index Byte
+---------------+
+---------------+
0 | | Block Terminator Byte
+---------------+
<Packed Fields> = Reserved 3 Bits
Disposal Method 3 Bits
User Input Flag 1 Bit
Transparent Color Flag 1 Bit |
[/code]
Cela ne suffirait-il pas à notre bonheur ?
Malheureusement non, Transparent Color Flag indique si l'image est transparente ou pas. Si l'image est transparente on a un indice pour la couleur transparente. On a aussi un indice pour la couleur de fond. Souvent lorsque l'image est transparente les 2 indices sont identiques. Ensuite pour l'affichage tout dépend de comment est encodé le GIF prend le singe en exemple c'est nickel avec ou sans transparence. Le resultat diffère suivant Disposal Method

Envoyé par
Jipété
Pendant qu'on y est, ça concerne l'IHM mais je le mets ici quand même :
j'ai testé (va savoir pourquoi) le message d'erreur de FormDropFiles, et ça donne ça :

Tu vois écrit "Ok", toi ? Et "Abandonner" ? Moi pas.
Je suggère ça :
1 2 3 4
| MessageDlg('Erreur Inconnue : ' +
// #13 + #10 + 'Ok pour continuer' + #13 + #10 + 'Abandonner pour quitter l''application', mtError, [mbOK, mbAbort], 0);
#13 + #10 + 'Valider pour continuer' + #13 + #10 + 'Annuler pour quitter l''application', mtError, [mbOK, mbCancel], 0);
// TODO : if MessageDlg.Result = mbCancel then Application.Halt; |
[/code]
J'ai mis un TODO et un pseudo-code car F1 sur MessageDlg m'envoie dans les choux, donc je ne sais pas détecter le clic sur le bouton...
Ok c'est noté, mais petite question comment tu as fais pour lever cette exception car c'est quasiment impossible qu'elle apparaisse. Car la vérification de la signature du fichier court-circuite le processus.

Envoyé par
Jipété
Et enfin, un mystère pour moi dans l'unité
uFastBitmap :
le compilateur n'est pas content :
Warning: Local variable "ColorRGB24" does not seem to be initialized et ça concerne la ligne 5 (312 du code)
1 2 3 4 5 6 7
| procedure TColor32.Create(Color: TColor);
Var
ColorRGB24 : TColorRGB24;
Begin
ColorRGB24.Create(Color); // là !
Create(ColorRGB24);
End; |
C'est normale elle n'est pas initialisé, elle l'ai via la procedure Create
je vais rajouté pou empêcher l'affichage de ce message
1 2 3 4
| {$push}
{$warn 5057 off}
ColorRGB24.Create(Color);
{$pop} |
ou
{%H-}ColorRGB24.Create(Color);

Envoyé par
Jipété
Alors je tente ça, comme je le ferais pour une TStringlist par ex. (
sl := TStringlist.Create;) :
1 2 3 4 5 6 7 8
| procedure TColor32.Create(Color: TColor);
Var
ColorRGB24 : TColorRGB24;
Begin
// ColorRGB24.Create(Color);
ColorRGB24 := TColorRGB24.Create(Color);
Create(ColorRGB24);
End; |
mais là ça ne compile plus du tout :
Error: Incompatible types: got "untyped" expected "TColorRGB24" sur la ligne 6.
Pourquoi ?
Précisions :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Type
{ TColorRGB24 : Définition d'un pixel sur 24 bits au format RGB }
TColorRGB24Type = packed array[0..2] of byte;
TColorRGB24 = packed record
{ Creation de la couleur }
procedure Create(R,G,B : Byte); Overload;
procedure Create(Color:TColor); Overload;
{ Conversion vers un TColor }
function ToColor : TColor;
Case Integer of
0 : (V:TColorRGB24Type); // Acces via Tableau
1 : (Red,Green,Blue: Byte); // Acces via Composantes
end; |
L'erreur est normal sur ColorRGB24 := TColorRGB24.Create(Color); Create est une Procedure et non une fonction elle ne retourne pas de résultat

Envoyé par
Jipété
1 2 3 4 5 6 7 8 9
| Procedure TColorRGB24.Create(Color : TColor);
Var
lr,lg,lb : Byte;
Begin
lr := Color;
lg := Color shr 8;
lb := Color shr 16;
Create(lr,lg,lb);
End; |
Ici le create est appliqué sur lui même SELF.Create(lr,lg,lb) à la place, j'aurais pu écrire comme ceci
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Procedure TColorRGB24.Create(Color : TColor);
Var
lr,lg,lb : Byte;
Begin
lr := Color;
lg := Color shr 8;
lb := Color shr 16;
With Self do
begin
Red := lr;
Green := lg;
Blue := lb;
end;
End; |
Pour la création de ce genre type, je ne sais pas pourquoi mais je préfère utiliser des procédures que des fonctions
je préfère, comme ci-dessous. Sémantiquement ça me parait plus logique
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
Const
clRed24 : TColorRGB24= (Red:255;Green:0;Blue:0); // ou clRed24 : TColorRGB24= (v:(255,0,0));
Var
MaCouleur : TColorRGB24
begin
// Je préfère
MaCouleur.Create(255,0,0) // couleur rouge
//à MaCouleur := TColorRGB24.Create(255,0,0)
// Car si on veux assigner une autre couleur on fait simplement
MaCouleur := clRed24;
end; |
c'est un choix personnel après tu peux très bien modifier les procédures Create en fonctions :
1 2 3 4 5 6 7 8 9
| function TColorRGB24.Create(r,g,b):TColorRGB24;
begin
With Result do
begin
Red := r;
Green := g;
Blue := b;
end;
end; |
Partager