2010-11-10 12 views
2

(J'ai fait trois publications la semaine dernière sur SO concernant un projet Java sur lequel je travaille, je me sens coupable, mais quelles sont vos réponses?)Accéder aux informations sur la mémoire bitmap en utilisant les octets

Voici un morceau de code en C#:

Bitmap bitmap = ... 

int dstStride = bitmap.Stride; 

byte* bdst = (byte*)bitmap.Scan0; 

Je veux faire un algorithme équivalent en Java. Je commence à penser que c'est impossible, basé sur other, similar questions.

Je peux réellement reproduire les informations de foulée de mon bitmap, mais bien sûr, que byte* est presque impossible à reproduire. Ce qui se passe est plus tard qu'il ya une boucle for qui manipule l'image bitmap, à la:

bdst[x * 3 + y * dstStride + 2] = (byte)(alpha * bsrc[dx * 3 + L * srcStride + 2]); 

(x & y sont itérateurs dans une boucle)

Naturellement, je suis incapable de faire simplement BDST un octet tableau parce que cela n'a pas de sens. According to this totally awesome article, Scan0 est "[t] l'adresse dans la mémoire du tableau de données fixe."

Et à en juger par le post SO ci-dessus, cela n'est pas possible en Java. Confirmer/refuser?

+0

Vous ne savez pas pourquoi vous ne pouvez pas traiter bdst comme un tableau d'octets? C'est exactement ce que c'est. La classe C# Bitmap est un wrapper sur un objet bitmap natif qui représente évidemment les données d'image interne comme pointeur vers l'emplacement de la première mémoire. – VinayC

Répondre

1

Vous ne pouvez pas obtenir un pointeur direct vers la mémoire en Java. C'est évidemment par conception. Toutefois, vous pouvez obtenir un tableau de pixels à partir d'une image en utilisant la classe PixelGrabber. Ou, si vous avez un BufferedImage, vous pouvez directement utiliser le Raster. Cela peut vous aider à atteindre votre objectif sans accéder directement à la mémoire.