32 비트 RGBA 이미지 객체 (원래 32 비트 PNG)를 코드와 필요에 따라 32 비트 그레이 스케일 대응 객체로 변환하고 싶습니다. .32 비트 RGBA 이미지를 그레이 스케일 보존 알파로 변환하는 방법
저는 이미 read 여러 other 개의 질문과 온라인에서 많은 기사를 보았습니다. ColorMatrix를 사용해 보았지만 알파를 잘 처리하지 못하는 것 같습니다. 완전히 불투명 한 그레이 스케일 픽셀입니다. 부분적으로 투명 한 픽셀은 해당 픽셀에 여전히 색조가 있기 때문에 잘 번역되지 않는 것 같습니다. 눈에 띄기에 충분하다.
new System.Drawing.Imaging.ColorMatrix(new float[][]{
new float[] {0.299f, 0.299f, 0.299f, 0, 0},
new float[] {0.587f, 0.587f, 0.587f, 0, 0},
new float[] {0.114f, 0.114f, 0.114f, 0, 0},
new float[] { 0, 0, 0, 1, 0},
new float[] { 0, 0, 0, 0, 1}
});
이 내가 꽤 표준 NTSC 가중 행렬을 읽은대로입니다 다음과 같이 내가 사용
ColorMatrix입니다. 그런 다음 Graphics.DrawImage
과 함께 사용합니다. 그러나 부분적으로 투명한 픽셀은 여전히 채색되어 있습니다. 나는 이것이 WinForms PictureBox
을 통해 Image 객체를 흰색 배경에 표시하고 있음을 지적해야합니다. PictureBox가 이미지를 그려 투명 파트를 처리하는 방식 일 수 있습니까? 배경 색상이 영향을 미치지 않습니다. (색상의 색조는 원래 이미지에서 나온 것입니다.)하지만 PictureBox는 투명 픽셀을 올바르게 다시 그리지 않습니다.
OpacityMask와 함께 FormatConvertedBitmap을 사용하는 몇 가지 방법을 보았습니다. 나는 그것을 시도하지 않았다. 왜냐하면 주로 PresentationCore.dll을 가져올 필요가 없다. (.NET 2.0 제한된 응용 프로그램에서는 작동하지 않는다.) 물론 기본적인 System.Drawing. * 작업은이 간단한 절차를 수행 할 수 있습니까? 안 그래요?
이미지의 배경에 색조가 있지 않은 것은 확실합니까? RGB 값이 정확히 같으면 색이 없어야합니다. ColorMatrix 정의 게시. – ChrisF
나는 그렇지 않을 것이라고 확신합니다. 이미지는 PictureBox를 통해 표시됩니다. 물론 PictureBox의 배경은 투명합니다. 실제로 부모의 색 (이 경우 흰색)을 사용한다는 것을 의미합니다. 그러나 새 회색 음영 이미지의 투명한 가장자리는 여전히 녹색으로 물 들었습니다 (원본 이미지의 색상은 대부분 녹색이었습니다). –