Gå til innhold

C#: Fargeulikheter ved lesing av piksler i php og C#


Anbefalte innlegg

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 av martin82
Lenke til kommentar
Videoannonse
Annonse

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 av martin82
Lenke til kommentar

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

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 av martin82
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...