У меня есть изображение .PNG с прозрачным фоном и черным рисунком с черным цветом, как я могу изменить «черный цвет чертежа» на этом изображении на любой цвет, который я хочу программно; с использованием обода 4.5 API? СПАСИБО В ADVANCE ....Как изменить цвет в изображении программным путем?
ответ
Я нашел решение, вот оно для тех, кто заинтересован.
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;
}
Вы можете проанализировать изображение RGB, ищущее черный цвет, и заменить его любым желаемым цветом.
Спасибо Ali .... в следующем посте вы найдете реализацию. –
Добро пожаловать, и хорошая реализация. –
Вы можете прочитать свое изображение PNG в байтовый массив и отредактировать палитру палитры. Этот метод подходит только для изображений PNG-8. Это мой код:
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);
}
}
Не могли бы вы объяснить, почему вы увеличиваете смещение? И какова цель параметра смещения? –
«Смещение» - это просто текущая позиция в файле - мы читаем поток и записываем его в массив в текущей позиции. Но этот код 3 года - теперь мне кажется, что было бы лучше прочитать весь файл в массиве, а затем отредактировать этот массив :) –
- 1. Как изменить цвет текста предпочтений программным путем?
- 2. Xcode удаляет цвет из изображения программным путем?
- 3. Как получить цвет акцента программным путем?
- 4. Как изменить цвет на изображении?
- 5. Как изменить значения столбца идентификатора программным путем?
- 6. Как изменить профиль ежевики программным путем?
- 7. Как изменить права пользователя программным путем?
- 8. Как изменить цвет на прозрачный в изображении
- 9. Нарисовать изображение программным путем
- 10. Изменить видимость кнопки из заголовка программным путем?
- 11. Изменить цвет строки программным способом в WatchKit
- 12. Как изменить определенный цвет в изображении на другой цвет
- 13. Как установить фоновый цвет действия на белый программным путем?
- 14. РейтингBar в AlertDialog: Как изменить число звёзд программным путем?
- 15. изменить цвет каждого элемента в изображении SVG
- 16. Сделать программным обеспечением GUI программным путем?
- 17. Изменить цвет в изображении - (Greenscreen in JAVA)
- 18. Как показать представление программным путем
- 19. Создание градиентов программным путем?
- 20. Брус изменить цвет фона Просмотр программным
- 21. Фрагмент добавлен программным путем
- 22. Как изменить размер моего представления программным путем с помощью автозапуска
- 23. Как я могу изменить расположение файла программным путем?
- 24. Как изменить или сделать новое изображение запуска программным путем?
- 25. Как изменить bb пресс-роли форума программным путем?
- 26. Оракул формы меняет цвет фона окна программным путем?
- 27. Попытка изменить цвет прозрачной части на изображении
- 28. Как сделать UIProgressBar программным путем в быстром
- 29. Изменить цвет div путем зависания содержимого?
- 30. Как изменить цвет кожи в изображении с помощью Xcode?
Да, это сработает, но оно не изменит цвета, которые даже немного нечерны, что означает, что любое изображение, которое будет сглажено, окажется довольно уродливым. – funkybro