UNITE GRAPHIQUE IMOD, AVEC EXEMPLE

Bacterius
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
- 27 août 2008 à 14:56
blueperfect
Messages postés
234
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
- 31 déc. 2009 à 18:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47775-unite-graphique-imod-avec-exemple

blueperfect
Messages postés
234
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013

31 déc. 2009 à 18:20
>>moyen de connaître le type du fichier (si c'est un fichier graphique)
GraphicsEx.pas ?
Bacterius
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
17 sept. 2008 à 13:17
Ouais je sais il faudrait trouver un moyen de connaître le type du fichier (si c'est un fichier graphique) avant de l'ouvrir, pour éviter les exceptions ...

Cordialement, Bacterius !

PS : je finirai la fonction du cosmos après mes devoirs maison ^^
Nicolas___
Messages postés
992
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
24 avril 2013
2
17 sept. 2008 à 10:13
Salut , bon j'ai telecharge ta source (ici et sur ton site) ,
première remarque , il manque ImageAndMore , je le vire ca marche ...
deuxieme : if (ExtractFileExt(OpenDialog.FileName) '.jpg') or (ExtractFileExt(OpenDialog.FileName) '.jpeg') then

je te laisse deviné ce qui se passe quand un fichier s'appelle monImage.JPG ...

voila , je teste maintenant
Bacterius
Messages postés
3792
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
9
30 août 2008 à 23:15
Bonsoir,
je ferai cela dès que possible, car je vais déménager à Paris ;) je vais regarder les fonctions dès que j'aurai déménagé (dernier accès à internet jusqu'à [undefined])

Cordialement, Bacterius !
f0xi
Messages postés
4205
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
12 mars 2022
38
30 août 2008 à 21:33
2) J'ai remplacé "case (Y and $1) of" par "case (Y or $1) of" pour obtenir un vrai effet de vision nocturne. Avec le and, le noir devient du blanc, et le blanc du noir, maintenant c'est le contraire.

le (Y and $1) permet de savoir si on travail sur une ligne pair ou impair.
donc
1 (0001) & 1 = case 1
2 (0010) & 1 = case 0
3 (0011) & 1 = case 1
4 (0100) & 1 = case 0
5 (0101) & 1 = case 1
...

en faisant OR tu fait :
1 (0001) + 1 = case 1
2 (0010) + 1 = case 1
3 (0011) + 1 = case 1
4 (0100) + 1 = case 1
5 (0101) + 1 = case 1
...

en gros le case ne sert plus a rien puisque seul la ligne
pPix^[1] := COEF[not pPix^[1]];
est prise en compte.

donc la fonction se reduit a :
pPix^[1] := COEF[not pPix^[1]];
pPix^[0] := COEF[pPix^[1]];
pPix^[2] := COEF[pPix^[1]];
inc(pPix);

ce qui au passage fait sauter l'effet de Scanline. donc tu foire l'effet NV.

3) J'ai protégé le code avec un try..finally

tu n'aurais pas besoin de faire autant de Try Finally (inutile) si tu avais structuré tes fonction correctement :

procedure {bitmap filter}(src, dest: TBitmap; const {args}:{type});

4) J'ai modifié un peu les paramètres et le contour du code pour ne pas trop la faire différente des autres.

Regarde comment mes fonction graphique sont faite. le type ByteQuad me permet de me passer des fonction GetR, GetG etc, cela permet de ne pas avoir de Call dans les filtres ce qui donne de meilleur performances!
de plus ByteQuad permet de travailler aussi bien en RGB qu'en RGBA, ABGR, GRBA, GRB, BGR, etc...
en mode normal l'ordre est :
0 -> blue
1 -> green
2 -> red
3 -> alpha, draw context, reserved/ignored

d'ou le pPix^[1], pPix^[2], pPix^[0] dans mes algo bitmap.

c'est la meilleure methode en pure delphi que j'ai trouvé avec l'aide de florenth.
Afficher les 73 commentaires