1

J'essais de convertir un code JAVA en C#, et je bloque :
Image.get( x , y )
retourne un double du type -14935012 pour une image quasi-noir.
Mais ce double represente quoi en fait?

2

Edited_907

3

Ah bah oué. Merci.
C'est donc la 'luminosité' d'un pixel.
J'avais pourtant essayé en hexa, et je tombais sur FFFFFFFFFF1C1C1C , ça ressemblait bien à des couleurs, mais en hexa n'importe quel chiffre ressemble à une couleur.

Il y a une fonction GetPixel(x, y) en C# qui renvoit un objet R,G,B, je convertirais, dommage que je ne connaisse pas plus direct.
En tous cas merci à toi.

4

Le FF dans l'octet le plus significatif, c'est le canal alpha (FF = entièrement opaque)?
(Je demande parce que ça peut aider GUNNM et pour la culture générale, je n'ai pas vraiment besoin de la réponse.)
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

Effectivement, j'aimerais bien savoir, par curiosité puisque l'image est opaque partout.
C'est donc le A de ARGB ?

6

non c'est le FF de l'extension de signe du nombre négatif

-1 = FF = FFFF = FFFF...FFFFFFFF = etc
-2 = FE = FFFE = FFFF...FFFFFFFE = etc

7

Ça ne peut pas être ça. Le FF de FF1C1C1C n'est pas une extension de signe, le premier bit de 1 (0001 en binaire) est nul. En revanche, dans FFFFFFFFFF1C1C1C, les 8 premiers 'F' (FFFFFFFFFF1C1C1C) sont effectivement le résultat d'une extension de signe.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

Et aussi une extension de signe 24->32 bits n'aurait pas vraiment de sens...
Kevin Kofler (./4) :
Le FF dans l'octet le plus significatif, c'est le canal alpha (FF = entièrement opaque)?
(Je demande parce que ça peut aider GUNNM et pour la culture générale, je n'ai pas vraiment besoin de la réponse.)

Je connais pas Image.get, mais oui presque sûrement ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

9

C'est meme quasiment certain, dans 99% des cas, les images sont stocké en memoire soit sous la forme RGB (24bits) soit sous la forme ARGB (32bits) et ce même si A n'est pas utilisé (donc a 255)

ce qui fait que pour récupérer un pixel, on va chercher octets, avec le premier = A, le second = R, le troisième = G et le dernier, et quatrième = B

C'est sur certaine approche n'utilisent pas cette méthode, mais c'est quand même rare. Il est quasi certain que ton image est stocké en mémoire sous cette forme, et que la valeur que tu obtiens, n'est en fait du qu'au fait que tu la traite comme une valeur, et non comme un tableau d'octets

Le plus simple pour avoir les niveaux R G et B (en C en tout cas) c'est d'avoir des macros (ou des fonctions) genre

#define getA(x) ((x & 0xFF000000) >> 24)
#define getR(x) ((x & 0x00FF0000) >> 16)
#define getG(x) ((x & 0x0000FF00) >> 8)
#define getB(x) (x & 0x000000FF)

avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

10

ouai enfin il doit y avoir une class pour cela quand même...
Tant qu'a faire crade allons y:
(struct { char A,R,G,B;})(a).R

11

OK, merci de vos réponses.

Je dois convertir ça : float toto = image.get(x,y) & 255
Mais je ne sais pas comment obtenir le tableau de byte du pixel en C# qui est trop managé pour ça. Sauf passer par du code UNSAFE.

Je ne comprend pas trop non plus ce que fait ce & 255. Une opération AND bit à bit, mais je n'en vois pas la finalité.

12

Le &255, ça récupère le dernier canal tout simplement, faut tester si c'est le rouge ou le bleu (probablement le bleu).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

Edited_908

14

ok, ça traite des image n&b, donc j'y voit plus clair.
Merci.

15

bein les floats c'est beaucoup utilisé en imagerie... surtout si tu fais des transformées etc.

16

GUNNM (./11) :
Je dois convertir ça : float toto = image.get(x,y) & 255

Bitmap.GetPixel ? Par contre c'est assez lent et ça se ressent vite sur un traitement d'image couteux (vive le code unsafe)

Par contre le float oui c'est bien, mais si tu le laisse dans l'intervalle [0..255], quel est l'intérêt ?
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

17

En fait, j'ai isolé une partie de la ligne pour vous montrer, mais la variable toto est bien un float.
Bitmap.GetPixel est lent effectivement, j'ai donc opté pour du code unsafe, d'ailleur j'ai pus virrer le &255 car mon pointeur vers le pixel renvoit un tableau, et comme l'image est en N&B, je prend l'indice 0 et c'est tout.

Merci à tous pour vos réponses.