J'ai une image .PNG avec un fond transparent et un dessin avec une couleur noire, comment pourrais-je changer la "couleur de dessin noir" dans cette image à n'importe quelle couleur que je veux par programmation; en utilisant rim 4.5 API? MERCI À L'AVANCE ....comment modifier une couleur dans une image par programme?
Répondre
J'ai trouvé la solution, la voici pour ceux qui sont intéressés.
Bitmap colorImage(Bitmap image, int color) {
int[] rgbData= new int[image.getWidth() * image.getHeight()];
image.getARGB(rgbData,
0,
image.getWidth(),
0,
0,
image.getWidth(),
image.getHeight());
for (int i = 0; i < rgbData.length; i++) {
int alpha = 0xFF000000 & rgbData[i];
if((rgbData[i] & 0x00FFFFFF) == 0x00000000)
rgbData[i]= alpha | color;
}
image.setARGB(rgbData,
0,
image.getWidth(),
0,
0,
image.getWidth(),
image.getHeight());
return image;
}
Vous pouvez analyser l'image RGBs recherche de la couleur noire et la remplacer par la couleur que vous désirez.
Merci Ali .... dans le prochain post, vous trouverez la mise en œuvre. –
Vous êtes les bienvenus, et une belle mise en œuvre. –
Vous pouvez lire votre image PNG pour créer un tableau d'octets et éditer un fragment de palette. Cette méthode convient uniquement aux images PNG-8. Voici mon code:
public static Image createImage(String filename) throws Throwable
{
DataInputStream dis = null;
InputStream is = null;
try {
is = new Object().getClass().getResourceAsStream(filename);
dis = new DataInputStream(is);
int pngLength = dis.available();
byte[] png = new byte[pngLength];
int offset = 0;
dis.read(png, offset, 4); offset += 4; //‰PNG
dis.read(png, offset, 4); offset += 4; //....
while (true) {
//length
dis.read(png, offset, 4); offset += 4;
int length = (png[offset-1]&0xFF) | ((png[offset-2]&0xFF)<<8) | ((png[offset-3]&0xFF)<<16) | ((png[offset-4]&0xFF)<<24);
//chunk type
dis.read(png, offset, 4); offset += 4;
int type = (png[offset-1]&0xFF) | ((png[offset-2]&0xFF)<<8) | ((png[offset-3]&0xFF)<<16) | ((png[offset-4]&0xFF)<<24);
//chunk data
for (int i=0; i<length; i++) {
dis.read(png, offset, 1); offset += 1;
}
//CRC
dis.read(png, offset, 4); offset += 4;
int crc = (png[offset-1]&0xFF) | ((png[offset-2]&0xFF)<<8) | ((png[offset-3]&0xFF)<<16) | ((png[offset-4]&0xFF)<<24);
if (type == 0x504C5445) { //'PLTE'
int CRCStart = offset-4;
int PLTEStart = offset-4-length;
//modify PLTE chunk
for (int i=PLTEStart; i<PLTEStart+length; i+=3) {
png[i+0] = ...
png[i+1] = ...
png[i+2] = ...
}
int newCRC = crc(png, PLTEStart-4, length+4);
png[CRCStart+0] = (byte)(newCRC>>24);
png[CRCStart+1] = (byte)(newCRC>>16);
png[CRCStart+2] = (byte)(newCRC>>8);
png[CRCStart+3] = (byte)(newCRC);
}
if (offset >= pngLength)
break;
}
return Image.createImage(png, 0, pngLength);
} catch (Throwable e) {
throw e;
} finally {
MainCanvas.closeInputStream(dis);
MainCanvas.closeInputStream(is);
}
}
pourriez-vous expliquer pourquoi vous incrémentez le décalage? Et quel est le but du paramètre offset? –
'offset' est juste une position actuelle dans un fichier - nous lisons le flux et l'écrivons dans le tableau à la position actuelle. Mais ce code a 3 ans - maintenant il me semble qu'il vaudrait mieux lire tout le fichier dans le tableau puis éditer ce tableau :) –
- 1. Modifier une image dans java
- 2. Affectation par programme d'une couleur à une ligne dans DataGrid
- 3. Modifier la couleur d'arrière-plan UIView par programme
- 4. Comment isoler une seule couleur dans une image
- 5. Comment obtenir une couleur majoritaire dans une image?
- 6. modifier par programme la couleur d'arrière-plan éclipse
- 7. Modifier les pixels à remplir avec une couleur dans une image WPF
- 8. Comment puis-je modifier une chaîne d'agent utilisateur par programme?
- 9. Comment modifier par programme UIColor de vue
- 10. Comment isoler une seule couleur sur une image avec PHP?
- 11. Comment puis-je modifier une chaîne d'agent utilisateur par programme?
- 12. Comment enregistrer une image d'un autre site Web par programme?
- 13. Comment assigner par programme une image (Bitmap) à un contact?
- 14. Comment modifier UIView par programme?
- 15. Comment obtenir une image couleur dans l'iPhone sdk
- 16. Modifier une image en utilisant JCrop
- 17. Comment couper une image en utilisant un motif de couleur?
- 18. locale modifier par programme
- 19. Comment déterminer "Couleur d'un pixel spécifique" dans une image?
- 20. Supprimer une couleur d'une image bitmap?
- 21. envoyer une image avec mms sur iphone par programme?
- 22. Création par programme d'une zone cliquable sur une image
- 23. définir une image à l'arrière-plan d'une étiquette par programme
- 24. Comment modifier un DataTemplate par programme?
- 25. Modifier une couleur div en hiccup
- 26. Filtrage tout sauf une couleur spécifique d'une image dans Flex
- 27. Comment définir la couleur d'arrière-plan pour une ligne de grille de données par programme
- 28. Modifier les couleurs en C par programme #
- 29. Comment modifier une image sur un survol dans WPF?
- 30. Comment modifier une image bitmap une fois qu'il a été chargé par win32
Oui, cela fonctionnera, mais il ne changera pas les couleurs qui sont même légèrement noir, ce qui signifie que toute image qui est un alias finira par être plutôt moche. – funkybro