Transparence de Png

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Transparence de Png

Message par scaraber »

Salut
Voila je cherche comment trouver la couleur de transparence d'une image png.
voila tout
merci d'avance
A+
Scaraber
Avatar de l’utilisateur
Crystal Noir
Messages : 892
Inscription : mar. 27/janv./2004 10:07

Message 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.
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 ? :)
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message 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
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message 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
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

Message 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)
Répondre