2011-07-05 3 views
0

C#에서 행렬 곱셈, 합계 등에 XNA 벡터를 선언하고 사용하려고합니다.C# : 행렬 곱셈 등을위한 XNA 벡터 선언 및 사용 al

일반 SetPixel 및 GetPixel보다 빠르게 처리하기 위해 이미지 처리에 사용됩니다. 그러나, 나는 항상 실례를 찾기 위해 실패하고 나는 많은 예제를 온라인으로 시도했지만 뭔가를 놓치고있는 것 같습니다.

도움말 및 샘플 코드?

감사합니다.

+0

100 % 확신 할 수는 없지만 사용할 수있는 기본 제공 Matrix 클래스가 있어야합니다. –

+0

더 빠른 이미지 처리 기능을 사용하기 위해 GPU를 사용하고자합니다. – johnshaddad

답변

1

성능이 걱정되면 unsafe 컨텍스트의 코딩으로 되돌릴 수 있습니다.

안전하지 않은 키워드로 유형, 유형 멤버 또는 구문 블록을 표시하면 포인터 유형을 사용하고 해당 범위 내의 메모리에서 C++ 스타일 포인터 연산을 수행 할 수 있으며 관리 대상 내에서이를 수행 할 수 있습니다. 실행 프레임 워크. 안전하지 않은 코드는 해당하는 안전한 구현보다 빠르게 실행될 수 있습니다.

unsafe void BlueFilter (int[,] bitmap) 
    { 
    int length = bitmap.Length; 
    fixed (int* b=bitmap) 
    { 
     int* p=b; 
     for (int i=0, i<length; i++) 
     *p++ &= 0xFF; 
    } 
    } 

(Source) 당신은 또한 살펴 것을에서 별도로


: 여기

은 요컨대 책 C# 4.0에서 오는 좋은, 간단한 예제입니다 이 SO 질문에

Why is matrix multiplication in .NET so slow?

+0

감사합니다. 그러나 GPU를 유용하게 사용하는 방법은 무엇입니까? – johnshaddad

+0

@johnshaddad | 개발자는 직접 벤더가 매니지드 API를 제공하지 않고 x86/x64 기반 명령어 세트를 가지고 있지 않으며, NVIDIA는 CUDA를 제공하지만 C++ 만 지원하므로 GPU를 활용합니다. Interop 레이어를 만들 수 있지만 병렬 처리를 사용하면 훨씬 간단합니다 :) –

+0

실시간으로 HD 이미지를 처리하는 것은 어떨까요? HD로 찍은 비디오 에서처럼 라이브로 처리하고 싶습니다 (예 : 사진을 뒤집거나 다른 작업하기). 튜토리얼 또는 샘플 코드를 사용하면 이러한 경우에 가장 적합한 포인터를 찾을 수 있습니까? 감사합니다 – johnshaddad

0

벡터는 1 x n 행렬입니다. 합계와 곱셈을위한 메소드로 Matrix 클래스를 만듭니다.

public class Matrix 
{ 
    private int[,] m_array; 

    public Matrix(int m, int n) 
    { 
     m_array = new int[m, n]; 
    } 

    public Matrix(int[,] other) 
    { 
     m_array = other; 
    } 

    public Matrix Mult(Matrix other) 
    { 
     if (this.m_array.GetLength(1) != other.m_array.GetLength(0)) 
      return null; 

     int[,] res = new int[this.m_array.GetLength(0), other.m_array.GetLength(1)]; 

     for (int i = 0; i < this.m_array.GetLength(0); ++i) 
      for (int j = 0; j < other.m_array.GetLength(1); ++j) 
      { 
       int s = 0; 
       for (int k = 0; k < this.m_array.GetLength(1); ++k) 
        s += this.m_array[i, k] * other.m_array[k, j]; 
       res[i, j] = s; 
      } 

     return new Matrix(res); 
    } 
} 
+0

감사. 그러나 GPU를 유용하게 사용하는 방법은 무엇입니까? – johnshaddad