3

몇 시간 동안 문자 그대로 시도했지만이 문제를 해결할 수 없었습니다.WriteableBitmap 오류가 잘못되었습니다. 픽셀 배열이 매우 부정확합니다.

나는 800x369 인 UserControl을 가지고 있으며 단순히 월드 맵을 구성하는 경로를 포함하고 있습니다. 이것을 가로보기 페이지에 놓은 다음 WriteableBitmap으로 렌더링합니다. 그런 다음 1 차원 픽셀 배열을 2 차원 정수 배열로 바꾸기 위해 변환을 실행합니다. 그런 다음 변환을 확인하기 위해 사용자 정의 컨트롤의 click 명령을 연결하여 새로 만든 배열의 사용자 정의 컨트롤에 상대적인 Point.X 및 Point.Y를 사용합니다. 내 논리는 이렇게이다, 나는 검사를 수행 할 때, 나는 완전히 완전히 이상한 결과를 얻을 이제

public static int[,] To2DArray(this int[] arr,int rowLength) 
{ 
    int[,] output = new int[rowLength, arr.Length/rowLength]; 
    if (arr.Length % rowLength != 0) throw new IndexOutOfRangeException(); 
    for (int i = 0; i < arr.Length; i++) 
    { 
     output[i % rowLength, i/rowLength] = arr[i]; 
    } 
return output; 
} 

: 분명히 모든 픽셀 중 하나 값에있는 같은

wb = new WriteableBitmap(worldMap, new TranslateTransform()); 
wb.Invalidate(); 
intTest = wb.Pixels.To2DArray(wb.PixelWidth); 

내 변환 로직은 -1 또는 0이며,이 값은 완전 독립 원래 색상입니다. 다만 후손에 대한

는 :

private void Check(object sender, MouseButtonEventArgs e) 
{ 
    Point click = e.GetPosition(worldMap); 
    ChangeNotification(intTest[(int)click.X,(int)click.Y].ToString()); 
} 

결과보기 WriteableBitmap 그것으로 렌더링 한 경로에 전혀 상관 관계 : 여기 내 검사 코드입니다. 경로에는 흰색이 채워집니다.

도대체 무슨 일이 벌어지고 있습니까? 나는 운이없는 몇 시간 동안 노력했다. 제발, 제 WP7 앱을 제출하지 못하게하는 주요한 문제입니다. 어떤 지침?

+0

프로젝트를 압축하십시오. – Hades32

+0

포기했습니다. 코드를 더 이상 사용할 수 없습니다. 가까운 투표를 할 수 있습니까? –

답변

1

코드가 올바로 작동하면 Silverlight에서 미리 곱한 ARGB를 사용하므로 투명하게 각 RGB 값에 0이 곱해지고 최종 결과는 0이됩니다. 흰색의 경우 4 개의 255 바이트가 -1이므로 정수가 어떻게 표현되는지. BitConverter 클래스를 사용하여 int에서 바이트를 가져올 수 있지만 Get/SetPixel 메서드가 있고 사전 곱셈을 처리하는 WriteableBitmapEx을 권하고 싶습니다.

당신은 16 진수 값을 찾는다면 우리가이 더 쉽게 테스트 할 수 있도록

ChangeNotification(intTest[(int)click.X,(int)click.Y].ToString("X8"));

+0

아니요 아니요! 그것은 내가 돌아 오는 값이 경로의 실제 픽셀과 전혀 상관 관계가 없기 때문에 작동하지 않습니다! 하나의 흰색 픽셀은 -1이되고 다른 하나는 0이됩니다! 빈 공간과 동일합니다! –

+0

코드에 문제가 없습니다. 클릭 할 때 픽셀을 녹색으로 설정하고 모든 변형에 문제가 있는지 확인할 수있는 방법으로 연결된 확장 프로그램을 사용해보십시오. – Kris

+0

또 다른 한가지는 투명 영역을 클릭 할 때 Check 메소드가 호출된다는 것입니다. 그렇지 않으면 Background = "Transparent"가 UserControl의 LayoutRoot에 설정됩니다. 또한 코드에서 WriteableBitmap을 만드는 위치는 어디입니까? (나는 Loaded 이벤트에서 그것을하고있다.) – Kris