투명한 배경과 함께 검은 색으로 된 그림이있는 .PNG 이미지가 있습니다. 어떻게이 이미지의 "검은 색 그리기 색"을 프로그래밍 방식으로 원하는 색으로 변경할 수 있습니까? 림 4.5 API를 사용하고 계십니까? 감사합니다 ....프로그래밍 방식으로 이미지의 색상을 변경하는 방법은 무엇입니까?
답변
해결책을 찾았습니다. 관심있는 사람들을위한 해결책입니다.
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를 구문 분석하고 원하는 색으로 대체 할 수 있습니다.
다음 게시물에 다음 구현에서 찾을 수 있습니다. –
당신은 환영 받고 좋은 구현입니다. –
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);
}
}
오프셋을 증가시키는 이유를 설명 할 수 있습니까? 오프셋 매개 변수의 목적은 무엇입니까? –
'offset'은 파일의 현재 위치에 불과합니다. 스트림을 읽고 현재 위치의 배열에 씁니다. 하지만이 코드는 3 살입니다. 이제는 전체 파일을 배열로 읽은 다음이 배열을 편집하는 것이 더 나을 것 같습니다. :) –
- 1. 이미지의 색상을 변경하는 방법은 무엇입니까?
- 2. iOS에서 하이퍼 링크의 기본 색상을 프로그래밍 방식으로 변경하는 방법은 무엇입니까?
- 3. 현재 디렉토리를 기반으로 Konsole에서 프로그래밍 방식으로 색상을 변경하는 방법은 무엇입니까?
- 4. 색상을 프로그래밍 방식으로 추가하는 방법은 무엇입니까?
- 5. 이미지의 색상을 지정하는 방법은 무엇입니까?
- 6. SWT- Windows에서 ProgressBar 색상을 변경하는 방법은 무엇입니까?
- 7. ToggleButton 상태를 프로그래밍 방식으로 변경하는 방법은 무엇입니까?
- 8. 프로그래밍 방식으로 토스트의 정렬을 변경하는 방법은 무엇입니까?
- 9. iPad 프로그래밍, 프로그래밍 방식으로 색상을 뒤집을 수있는 방법은 무엇입니까?
- 10. Android가 프로그래밍 방식으로 색상을 사용자 사양으로 변경합니다.
- 11. Radwindow 로딩 이미지의 색상을 파란색으로 변경하는 방법
- 12. 선택한 바 버튼의 색상을 변경하는 방법은 무엇입니까?
- 13. 색상을 변경하는 방법은 UITableView?
- 14. 프로그래밍 방식으로 대화 상자 배경색을 변경하는 방법은 무엇입니까?
- 15. PHP로 이미지의 가장자리를 프로그래밍 방식으로 부드럽게하는 방법은 무엇입니까?
- 16. iPad에서 배경 화면을 프로그래밍 방식으로 변경하는 방법
- 17. 프로그래밍 방식으로 TabBarViewController에서보기를 변경하는 방법?
- 18. Installshield 2011에서 글꼴 색상을 변경하는 방법은 무엇입니까?
- 19. UITabBarItem에서 텍스트 색상을 변경하는 방법은 무엇입니까?
- 20. iPhone에서 UITextField의 색상을 변경하는 방법은 무엇입니까?
- 21. 라벨 텍스트의 색상을 변경하는 방법은 무엇입니까?
- 22. 수평선의 색상을 동적으로 변경하는 방법은 무엇입니까?
- 23. WindowsForms의 CheckedListBox에서 SelectedItem의 색상을 변경하는 방법은 무엇입니까?
- 24. UISegmentControl에서 텍스트 색상을 변경하는 방법은 무엇입니까?
- 25. Google Map에서 마커의 색상을 변경하는 방법은 무엇입니까?
- 26. jqGrid 셀의 색상을 변경하는 방법은 무엇입니까?
- 27. QListWidget에서 항목의 텍스트 색상을 변경하는 방법은 무엇입니까?
- 28. 선택한 텍스트 색상을 변경하는 방법은 무엇입니까?
- 29. vaadin에서 tabbar 색상을 변경하는 방법은 무엇입니까?
- 30. DataGridview에서 열의 색상을 변경하는 방법은 무엇입니까?
네, 그래도 작동 할 것입니다,하지만 약간 색이 바뀌지는 않습니다. 즉, 앨리어싱 된 이미지는 오히려 추한 것처럼 보일 것입니다. – funkybro