문제

자세한 내용은 다음과 같습니다(저는 C# BTW를 사용하고 있습니다).

서버로부터 32bpp 이미지(JPEG 압축)를 받았습니다.어떤 시점에서는 비트맵의 Palette 속성을 사용하여 과포화 픽셀(밝기 > 240)을 빨간색으로 지정하고 싶습니다.그렇게 하려면 이미지를 인덱스 형식으로 가져와야 합니다.

이미지를 GIF로 변환해 보았으나 품질이 저하되었습니다.다음 방법으로 인덱스 형식으로 새 비트맵을 만들어 보았습니다.

// causes a "Parameter not valid" error
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Indexed)

// no error, but the resulting image is black due to information loss I assume
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Format8bppIndexed)

나는 지금 헤매고 있다.이 이미지의 데이터는 사용자에 의해 지속적으로 변경되므로 피할 수 있다면 밝기가 240보다 큰 픽셀을 수동으로 설정하고 싶지 않습니다.이미지가 생성될 때 팔레트를 한번만 설정하면 작업이 완료됩니다.내가 이 문제를 처음부터 잘못된 방향으로 진행하고 있다면 알려주시기 바랍니다.

편집하다:감사합니다. 여기에 제가 달성하려는 작업에 대한 자세한 내용이 있습니다.

조직 슬라이드를 고해상도로 스캔하고 있습니다(병리학 응용).실제 스캐너에 인터페이스를 작성합니다.우리는 라인스캔 카메라를 사용합니다.카메라의 라인 속도를 테스트하기 위해 사용자는 아주 작은 부분을 스캔하고 이미지를 봅니다.

이미지는 트랙 바 옆에 표시됩니다.사용자가 트랙 바를 움직일 때(라인 속도 조정), 새로운 라인 속도에서 어떻게 보일지 모델링하기 위해 이미지의 전체 강도를 변경합니다.현재 ImageAttributes 및 ColorMatrix 개체를 사용하여 이 작업을 수행합니다.

사용자가 트랙바를 조정하면 나도 매트릭스를 조정합니다.이는 픽셀당 정보를 제공하지 않지만 성능은 매우 좋습니다.나 ~할 수 있었다 여기에는 LockBits와 일부 안전하지 않은 코드를 사용하지만 가능하다면 다시 작성하지 않는 것이 좋습니다.새 이미지가 생성되면 밝기 값이 240보다 큰 모든 픽셀을 빨간색으로 표시하고 싶습니다.나는 비트맵에 대한 팔레트를 미리 정의하는 것이 이 작업을 수행하는 깔끔한 방법이라고 생각했습니다.

도움이 되었습니까?

해결책 3

모두에게 도움을 주셔서 감사합니다.ImageAttributes 클래스를 사용하고 간단히 색상 다시 매핑 테이블을 설정하면 이 문제를 해결할 수 있는 것 같습니다.

ColorMap[] maps = new ColorMap[someNum]
//  add mappings
imageAttrs.SetRemapTable(maps);

다시 한 번 도움을 주셔서 감사합니다. 최소한 뭔가를 배웠습니다.

다른 팁

32bpp에서 8bpp 인덱스로 전환하면 원본 이미지의 총 색상이 256개 미만이 아닌 한 거의 항상 품질이 저하됩니다.

영향을 받은 픽셀이 빨간색으로 오버레이되는 다른 이미지를 만든 다음 두 이미지를 모두 표시할 수 있습니까?

밝기가 240보다 크므로 먼저 오버레이를 회색조로 변환한 다음 인덱싱하여 지나치게 밝은 픽셀을 얻을 수 있습니다.

범죄자를 태그한 후에는 무엇을 하고 있는지 지정하지 않으므로 그것이 효과가 있을지 모르겠습니다.

픽셀 셰이더를 사용하면 쉽게 할 수 있는 것 같습니다.아주 초기의 셰이더 모델이라도 이렇게 쉬운 기능을 지원할 것입니다.

그러나 문제는 다음과 같습니다.

너무 서두르지 않고 애플리케이션에 셰이더 지원을 포함할 수 있습니까?

셰이더 프로그래밍을 아시나요?

편집하다:

아마도 이와 같은 작업을 수행할 수 있는 3D 컨텍스트가 없을 것입니다 =/

나는 주로 내 생각을 표현하고있었습니다.

단일 CPU로 그림을 픽셀 단위로 조작하는 것이 실시간으로 가능해야 하지 않습니까?

그렇지 않다면 GPGPU 프로그래밍과 Open CL을 살펴보세요.

다시 수정하세요:

앱이 실제로 무엇을 하는지에 대해 좀 더 자세히 알려주시면 조금 더 도움을 드릴 수 있을까요?예를 들어, 웹앱을 만들고 있다면 내 팁 중 어느 것도 의미가 없을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top