shadowano Skrevet 14. juli 2009 Del Skrevet 14. juli 2009 (endret) Hei I et gitt pixel får jeg en verdi for rød og blå som er 1 fargeverdi lavere i PHP enn jeg får ved å lese samme pixel i C#. Den grønne verdien er riktignok like. Totalt i bildet utgjør det STOR forskjell når jeg genererer et fargehistogram av alle pixlene i PHP sammenlignet med C#. I PHP leses bildet slik: imagecreatefromjpeg($filepath); $rgb = @imagecolorat($src_id, $x, $y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; i C#: BitmapData BmpData = image.LockBits( new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); byte* ImPtr = (byte*)BmpData.Scan0; green = ImPtr[1]; red = ImPtr[2]; blue = ImPtr[3]; Noen som har anelse om hva forskjellen er? Bildet har 96 dpi og fargedybde på 24, og jeg leser samme bilde i begge tilfeller. Info om bildet i PHP: Array ( [0] => 130 [1] => 98 [2] => 2 [3] => width="130" height="98" [bits] => 8 [channels] => 3 [mime] => image/jpeg ) bit=8 er pr farge, dvs 8*channel (3)=24 bit pr pixel Endret 14. juli 2009 av martin82 Lenke til kommentar
BlueEAGLE Skrevet 14. juli 2009 Del Skrevet 14. juli 2009 Finn ut hvilken av de to rutinene som gir riktig resultat og legg til eller trekk fra 1 på den som ikke er riktig. Lenke til kommentar
shadowano Skrevet 14. juli 2009 Forfatter Del Skrevet 14. juli 2009 (endret) I photoshop får jeg riktig verdi som C# henter ut på det første pixelet. Mao PHP skiller seg litt ut. Noen som har en logisk forklaring på dette? Er GD biblioteket så dårlig? Edit: en liten korreksjon I PHP er den blå fargeverdien i det første pixelet 1 verdi lavere, og for den grønne en verdi høyere enn det photoshop viser. Endret 14. juli 2009 av martin82 Lenke til kommentar
BlueEAGLE Skrevet 14. juli 2009 Del Skrevet 14. juli 2009 I brukerkommentarene i manualen så står det The example given for returning the RGB values from the function (using & 0xFF) didn't work for me for PNG or GIF images. If you have this problem, try the following (which works): <?php $pixelrgb = imagecolorat($source,$x,$y); $cols = imagecolorsforindex($source, $pixelrgb); $r = $cols['red']; $g = $cols['green']; $b = $cols['blue']; ?> Lenke til kommentar
shadowano Skrevet 15. juli 2009 Forfatter Del Skrevet 15. juli 2009 (endret) uten å lese fra noen steder så er vel ikke jpeg indeksert, slik png og gif er. Derfor vil det ikke ha noe å si, eller at det blir mer feil, å bruke imagecolorsforindex. Edit: for testens skyld så ble resultatet det samme for PHP sin skyld. Og for et første pixelet sin skyld er ikke forskjellen stor, men totalt for hele bildet er histogrammene veldig ulike. Endret 15. juli 2009 av martin82 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå