Page 1 sur 1
Transparence de Png
Publié : ven. 27/oct./2006 20:00
par scaraber
Salut
Voila je cherche comment trouver la couleur de transparence d'une image png.
voila tout
merci d'avance
A+
Scaraber
Publié : ven. 27/oct./2006 22:54
par Crystal Noir
Trouver la couleur transparente d'une image qu'on a pas fait c'est galère.
Moi je procède comme suit :
1°) j'ouvre l'image avec mon éditeur
2°) je colore avec une couleur qui n'est pas dans le dessin la partie que je veux transparente
3°) j'utilise TransparentSpriteColor(#Sprite, Couleur) dans pure pour la définir.
on peut également utiliser la pipette dans le logiciel de retouche mais si l'image est de mauvaise qualité, on aura pas des valeurs exactes par ex pour du noir on aura à des endroits 0,0,0 et à d'autres 0,0,1 donc au final pas net.
Publié : sam. 28/oct./2006 10:34
par scaraber
Merci de ta reponce meme si je ne compte pas retoucher les image que j'utilise... je vais allez me renseigner, jai entendu parler des librairies SDL qui pourait trouver la transparence. si je trouve je vous fait signe
A+
Scaraber
Publié : sam. 28/oct./2006 10:44
par Dr. Dri
@Crystal Noir
Le png conserve à 100% la qualité de l'image, le seul probleme de ce type que tu puisse rencontrer c'estt l'antialiasing
@scaraber
Si ton png est +/- transparent, c'est qu'il contient une couche alpha, et c'est pas une couleur précise qui sera transparente comme avec direct x
c'est pas comme les gif qui ont la 1e couleur de la palette considérée comme transparente...
Dri
Publié : sam. 28/oct./2006 10:45
par Backup
d'apres ça :
Structure d'un fichier PNG
Un fichier PNG est constité d'une signature, permettant de signaler qu'il s'agit d'un fichier PNG, puis d'une série d'éléments appelés chunks (le terme "segments" sera utilisé par la suite). La signature d'un fichier PNG (en notation décimale) est la suivante :
137 80 78 71 13 10 26 10
La même signature en notation hexadécimale est :
89 50 4E 47 0D 0A 1A 0A
Chaque segment (chunk) est composé de 4 parties :
* La taille, un entier non signé de 4 octets, décrivant la taille du segment
* Le type de segment (chunk type) : un code de 4 caractères (4 octets) composés de caractères ASCII alphanumériques (A-Z, a-z, 65 à 90 et 97 à 122) permettant de qualifier la nature du segment
* Les données du segment (chunk data)
* Le CRC (cyclic redundancy check), un code correcteur de 4 octets permettant de vérifier l'intégrité du segment
Les segments peuvent être présents dans n'importe quel ordre si ce n'est qu'ils doivent commencer par le segment d'en-tête (IHDR chunk) et finir par le segment de fin (IEND chunk)
Les principaux segments (appelés critical chunks) sont :
* IHDR Image header
* PLTE Palette
* IDAT Image data
* IEND Image trailer
Les autres segments (appelés anciliary chunks) sont les suivants :
* bKGD Background color
* cHRM Primary chromaticities and white point
* gAMA Image gamma
* hIST Image histogram
* pHYs Physical pixel dimensions
* sBIT Significant bits
* tEXt Textual data
* tIME Image last-modification time
* tRNS Transparency
* zTXt Compressed textual data
il existe un segment "tRNS" qui doit definir la transparence non ?

Publié : sam. 28/oct./2006 13:22
par scaraber
Salut
bon deja merci de votre aide.
mes recherche sur google ne mon toujours pas satisfait je ne trouve pas coment faire.
il existe un segment "tRNS" qui doit definir la transparence non ?
Certainement mais comment le trouver ? et comment recuperer sa valeur ?
je vais essayer plusieurs chose pour essayer de trouver dans le .png le tRNS
A+
Scaraber
Publié : sam. 28/oct./2006 13:40
par scaraber
bon jai fait un ptit code mais jarive a trouver que le premier segment pas les autre
je pence que mon bug vien du moment ou je lit les donne ne savant pas leur taille je ne peu pas lire sur la bonne longueur et je decale tt .....
Si quelqun a une idee ..?
Code : Tout sélectionner
*memo=AllocateMemory(8)
filename$=OpenFileRequester("Fichier a ouvrir","","Chipset (*.png)|*.png",0)
OpenFile(1,filename$)
For byte=1 To 8
Debug ReadByte(1)
Next
For x=1 To 100
ReadLong(1)
a$=ReadString(1,#PB_Ascii)
Debug a$
If a$="tRNS"
Debug "-----------------------------"
Delay(500)
EndIf
ReadData(1,*memo,8)
ReadLong(1)
Next
CloseFile(1)
++
Scaraber
Publié : sam. 28/oct./2006 14:56
par scaraber
Salut
bon nouveau code qui semble marche enfin il trouve les premier segment mais apres je suis perdu ....
je m'aide d'une doc
http://www.libpng.org/pub/png/spec/1.2/ ... tml#C.tRNS
le seul probleme c'est que 3 byte = soit un long sous PB soit 3 octel enfin si tt est pas coherant entre la source et mon code c'est normal....
Si quelqun peu maider a finir ... et a trouver la transparence.
bon allez
A+
Code : Tout sélectionner
*memo=AllocateMemory(1024)
filename$=OpenFileRequester("Fichier a ouvrir","","Chipset (*.png)|*.png",0)
OpenFile(1,filename$)
For byte=1 To 8
Debug ReadByte(1)
Next
For x=1 To 100
ReadLong(1)
a$=ReadString(1,#PB_Ascii)
Debug "-/-/-"
Debug a$
Select a$
Case "IHDR"
Debug ReadLong(1)
Debug ReadLong(1)
Debug ReadByte(1)
ColorType=ReadByte(1)
Debug ColorType
Debug ReadByte(1)
Debug ReadByte(1)
Debug ReadByte(1)
Case "sRGB"
Debug ReadByte(1)
Case "gAMA"
Debug ReadLong(1)
Case "cHRM"
Debug ReadLong(1)
Debug ReadLong(1)
Debug ReadLong(1)
Debug ReadLong(1)
Debug ReadLong(1)
Debug ReadLong(1)
Debug ReadLong(1)
Debug ReadLong(1)
Case "PLTE"
Debug ReadByte(1)
Debug ReadByte(1)
Debug ReadByte(1)
Debug ReadByte(1)
Debug ReadByte(1)
Debug ReadByte(1)
Debug ReadByte(1)
Debug ReadByte(1)
EndSelect
ReadData(1,*memo,3)
Next
CloseFile(1)