2011-02-25 1 views
2

WPF C#에서 이미징 응용 프로그램을 작성하고 있습니다. 안전하지 않은 코드를 사용하여 픽셀 단위로 이미지 파일을 읽습니다.보호 된 메모리를 읽거나 쓰려고 시도했습니다. 이것은 종종 다른 메모리가 손상되었다는 표시입니다. C# 오류

문제는 픽셀 값을 쓸 때 Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 오류가 발생합니다. 일부 이미지에서는 잘 작동하고 다른 이미지에서는 오류를 보여줍니다. 픽셀의

읽기가 잘 작동

unsafe 
      { 
       byte* pbuff = (byte*)buff.ToPointer(); 
       for (int i = 0; i < size; i=i+stride) 
        { 
         pbuff[i] = (byte)cr[j].NewColor.Blue; 
         pbuff[i + 1] = (byte)cr[j].NewColor.Green; // here it shows error 
         pbuff[i + 2] = (byte)cr[j].NewColor.Red; 
        } 
      } 

편집 : 다음은 코드입니다.

   B = (double)pbuff[i]; 
       G = (double)pbuff[i + 1]; 
       R = (double)pbuff[i + 2]; 

읽기 중에는 오류가 표시되지 않지만 동일한 색인 (읽음)에서는 쓰기를 시도하면 오류가 표시됩니다.

+1

코드에 필수 부품이 누락되었습니다. 그리고 나는 스트라이드를 사용하는 방식이 잘못되었다고 생각합니다. – CodesInChaos

+1

왜 복식을 읽고 바이트를 쓰고 있습니까? 또한 버퍼를 고정 했습니까? –

답변

2

기본적으로 이것은 pbuff에서 참조하는 개체에 할당 된 메모리 외부의 메모리에 쓰려고한다는 것을 의미합니다.

따라서 기본적으로 안전 코드의 범위를 벗어나는 배열 인덱스와 같습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. 그러나 픽셀 읽기가 잘 작동합니다! –

+0

@Vinod = Knobloch의 대답은 할당 된 메모리 외부의 메모리에 쓰기에 특이했습니다. 당신이해야 할 일은 메모리를 로컬에 저장 한 다음 다시 메모리에 저장하는 것입니다. 이렇게하는 한 가지 방법은 구조체를 사용하는 것입니다. –

1

WPF를 사용하는 경우 안전하지 않은 코드는 사용하지 말고 대신 WPF로 멋지게 재생해야합니다. 이것은 내가 생각하기에 WriteableBitmap Class입니다.