색상 (PNG 색상 유형 3)에 대한 팔레트에 색인을 사용하는 일련의 PNG 이미지가 있습니다. 어떤 경우에는 팔레트의 일부 항목이 수정되는 이미지 사본을 만들어야합니다. 이 방법으로 우리는 원본 PNG를 계속해서 다시 칠합니다.iOS에서 런타임시 색인 된 PNG의 팔레트를 수정하려면 어떻게해야합니까?
자바에서는 IndexedColorModel
에서 RGB 값을 가져 와서 값을 수정하고 IndexedColorModel
을 새로 만들고 원본 이미지의 래스터 데이터와 새 색상 모델을 사용하여 BufferedImage
을 새로 만듭니다.
Actionscript에서 맨손으로 ByteArray
으로 PNG 바이트를 읽고 팔레트 청크를 찾고 값을 수정 한 다음 ByteArray
의 이미지를 런타임에로드해야합니다.
MonoTouch (이전 버전)를 통해 iOS 용 시스템을 구현하려고 합니다만 벽에 부딪 혔습니다. 나는 Actionscript 접근법이 여기에서도 효과가있을 것이라고 믿지만, 이번에는 그렇게 낮은 수준에서 일하는 것을 피하는 것이 좋을 것이고, 나는 가까이 갈 수있는 것처럼 보인다.
UIImage
에서 시작한다면 UIImage.CGImage.ColorSpace
으로 색 공간을 확보 할 수 있습니다. colorSpace.Model
인 색인 된 색상 모델인지 확인할 수 있습니다. 필자가 잘 모르는 부분은 팔레트 바이트의 실제 배열을 얻는 방법입니다.
그런 다음 다른 쪽에서는 새 팔레트로 새 이미지를 어떻게 만듭니 까? CGImage.WithColorSpace
그것이 내가 원하는 것을 할 것 같은데 ... 어쩌면? 그리고 나서 새로운 팔레트로 색상 공간을 만들 수 있어야합니다. 표면적으로는 CGColorSpace.CreateIndexed
이 내가 원하는 것처럼 보이지만, baseSpace
매개 변수가 어떻게 사용되는지 명확하지 않습니다. 필자가 제공 한 완전히 새로운 색상 표를 사용하여 CGColorSpace
을 만든 다음 원본 이미지의 색인을 새 색상 표와 함께 사용하고 싶습니다. 어쩌면 나는 정확히 CGColorSpace
이 사용 된 것을 오해하고 있습니다.
p.s. 누락 된'CGColorSpaceGetColorTable'을 http://bugzilla.xamarin.com foir에서 버그 보고서를 작성하고 색인 된 PNG를 첨부 할 수 있다면 다음 (안정적인) MonoTouch 릴리스에 추가하겠습니다. p/invoke 선언은 github의 (공개) maccore 저장소에서 끝날 것입니다 (그래서 거기에서 복사/붙여 넣기를 할 수 있습니다). 감사! – poupou
아하, 놓친 방법. 오늘 버그 보고서를 제출하겠습니다. 또한 필자는 관련성이 있는지 확신 할 수 없었기 때문에 언급하지 않았지만 실제로는 추가 * 레이어로 작업하고 있습니다. 실제로 소스는 Java로 IKVM을 통해 DLL로 변환됩니다. 수동 바인딩을 수행하는 방법을 (아직) 알지 못하지만 IKVM을 통해 액세스 할 수 있다면 지금은 그 방향으로 조사하러 갈 것입니다. 감사! – roguenet
첨부 된 예제 이미지로 버그가 제출되었습니다. https://bugzilla.xamarin.com/show_bug.cgi?id=4573. 다행스럽게도 필자는 오늘 수동 바인딩을 파헤 칠 시간을 갖고 성공을 다시보고 할 것입니다. – roguenet