2012-08-15 1 views
3

두 개의 WriteableBitmap 객체의 두 가지 색상 값을 결합하여 그 값을 계산해야합니다. 따라서 첫 번째 개체에서 ForEach 루프를 실행하고 두 번째 개체의 색 값과 색 값을 메서드로 구문 분석합니다.WriteableBitmapEx GetPixel()이 잘못된 값을 반환합니다.

writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmap.GetPixel(x, y))); 

제 I 대리자로부터 직접 얻을 값이지만 I는 WriteableBitmap 확장에서 getPixel와 방법을 사용하여 제 2 색의 값에 접근한다.

실제로이 작업은 비슷하지만 GetPixel 메서드는 잘못된 데이터를 반환합니다 (색이 잘못되었거나 "red-ish"입니다).

http://forums.silverlight.net/t/250392.aspx/1?WriteableBitmap+GetPixel+

는 이미지 형식에 문제가있을 수 있음을 언급한다 :

나는 다음 문서를 고개를 발견했다. 내 문제는 이미지가 생성되는 지점에 직접 액세스 할 수 없다는 것입니다. 나는 webservice에서 그것들을 추출하고 그 부분이 (적어도 나에게서) 적응 될 수 있는지 안다.

이 문제를 해결하기위한 다른 방법이나 해결 방법이 있으면 지금 내 질문이 지금입니까? 아이디어가 있습니까?

+1

은 '당신이 ISN 확실 두 가지 색상을 병합하려는 부작용이 있습니까? 그것은 올바르게 수행 할 수있는 과학입니다. 단순히 빨강, 녹색 및 파랑을 결합하는 것이 좋지 않을 수 있습니다. 인간의 눈에는 매우 비선형적인 색상 인식이 있습니다. –

+0

예 MergePixelColor 메서드의 모든 기능을 제외하여이 문제를 테스트했기 때문에 확실합니다. 테스트 목적으로 메소드에 넣은 색상을 반환하고 첫 번째 색상 값이 정확하고 두 번째 색상 값이 정확하면 false입니다. WriteableBitmap에서 데이터를 추출하는 GetPixel 메서드로 무언가를해야합니다. –

+0

@ThomasMondel A 구성 요소에 문제가있는 것 같습니다. Silverlight 용 버전 1.0.2를 사용했습니다. 예를 들어 사각형의 채우기 색을 # c3bcbcbc로 설정하면 직사각형의 실제 색은 # c38f8f8f가됩니다. 더 자세히 살펴 보지 못했지만, Writeablebitmapex Codeplex 사이트에 관심을 게시하는 것이 좋지 않을 수도 있습니다. –

답변

0

이 해결책은 단지 일시적인 해결책 일지 모르지만 주어진 시간에 더 나은 것을 얻을 수는 없습니다. 나는 mergedWriteableBitmap 사전과 사전에 자사의 색상 값을 저장 단지 루프 :

IDictionary<int, Color> mergedWriteableBitmapMapping = new Dictionary<int, Color>(); 
mergedWriteableBitmap.ForEach((x, y, color) => 
{ 
    int index = GetIndex(x, y, mergedWriteableBitmap.PixelWidth); 
    mergedWriteableBitmapMapping.Add(index, color); 
    return color; 
}); 

는 그 후 나는 방법에 올바른 색상 값을 구문 분석이 사전 값을 사용

writeableBitmap.ForEach((x, y, color) => 
    MergePixelColor(color, mergedWriteableBitmapMapping[GetIndex(x, y, mergedWriteableBitmap.PixelWidth)]));