2014-12-27 3 views
1

C++/CLI에서 그림 상자의 이미지를 :: MAT으로 변환하는 방법은 무엇입니까? System :: Drawing :: Bitmap^:: MAT

+0

아마도 'LockBits'를 사용하여 픽셀 값의 배열을 가리키는 포인터를 얻고 싶을 것입니다. 이와 같이 :이 줄'Gdiplus :: Bitmap * enhanced = pictureBox1-> Image;'가이 에러를 내고 있기 때문에 http://stackoverflow.com/q/24655452/103167 –

+0

이 작동하지 않습니다 : _IntelliSense : type의 값 "System :: Drawing :: Image ^"는 "Gdiplus :: Bitmap *"유형의 엔티티를 초기화하는 데 사용할 수 없습니다. _ –

+0

물론 C++/CLI 구문을 사용해야합니다. 'System :: Drawing :: Bitmap'은 네이티브 클래스'Gdiplus :: Bitmap'을 둘러싼 .NET 래퍼입니다. –

답변

1

당신은 (이미지가 정말 비트 맵이라고 가정)을 Bitmapcast Drawing.Image 필요 감사드립니다.
그런 다음 System.Drawing.Bitmap을 잠그고 BitmapData의 Scan0 속성을 사용하여 내부 버퍼에 액세스합니다.

System::Drawing::Bitmap^bitmapFrame = safe_cast< System::Drawing::Bitmap^>(pictureBox1->Image); 

BitmapData^ bmpData = bitmapFrame->LockBits(gcnew Rectangle(0, 0, bitmapFrame->Width, bitmapFrame->Height), System::Drawing::Imaging::ImageLockMode::ReadWrite, 
      bitmapFrame->Format); 
try 
{  
    void* data = bmpData.Scan0; 

    //use the data in the ::Mat constructor. 
} 
finally { bitmapFrame->UnlockBits(bmpData); }//Remember to unlock!!!