2017-09-29 9 views
0

Je voudrais modifier les données de couleur RVB par pixel d'une image PNG que j'ai chargée ByteBuffer, de préférence une solution simple et légère.Modifier les données d'image dans ByteBuffer

que je charge actuellement les données directement à partir du fichier dans un ByteBuffer en utilisant un ReadableByteChannel, qui ne pas décoder les données PNG.

La question est, comment puis-je

  1. Décoder les ByteBuffer données PNG dans quelque chose où je peux modifier les données de pixels
  2. Rallumez-en valide ByteBuffer (« valide » signifie qu'il serait être accepté par un shader OpenGl)
+0

Vous devez d'abord décoder le png avant de le passer à OpenGL. – BDL

+0

@BDL Je suppose que j'en ai besoin dans un format que NanoVG comprend. –

+0

Pourquoi lisez-vous un png blob encodé dans un tampon d'octets en premier lieu? – derhass

Répondre

0

Le codage d'image PNG inclut (entre autres) une compression ZLIB, vous ne pouvez pas accéder directement aux valeurs de pixels. Vous avez besoin (en pratique) pour décoder l'image, par exemple, la lecture dans un BufferedImage avec ImageIO.read()

Si pour une raison quelconque (image énorme, les contraintes de mémoire) vous ne voulez pas charger l'image complète en mémoire dans un BufferedImage vous pouvez utiliser un lecteur progressif (par exemple, PNGJ)