Я разрабатываю приложение на C ++ / CLI, которое использует OpenCV 4.2. В следующем коде я пытаюсь преобразовать Bitmap
в пользовательский тип (struct), но он выдает следующую ошибку:
ошибка C3699: '&&': невозможно использовать это косвенное type 'System :: Drawing :: Imaging :: PixelFormat'
Это мой код C ++:
typedef struct
{
cv::Mat mat;
System::Drawing::Imaging::PixelFormat pixelFormat;
}CustomImage;
CustomImage BitmapToCustomImage(System::Drawing::Bitmap^ bitmap)
{
CustomImage ob;
ob.pixelFormat = bitmap->PixelFormat;
System::Drawing::Rectangle blank = System::Drawing::Rectangle(0, 0, bitmap->Width, bitmap->Height);
System::Drawing::Imaging::BitmapData^ bmpdata = bitmap->LockBits(blank, System::Drawing::Imaging::ImageLockMode::ReadWrite, bitmap->PixelFormat);
int wb = ((bitmap->Width * 24 + 31) / 32) * 4;
cv::Mat cv_img(cv::Size(bitmap->Width, bitmap->Height), CV_8UC3, bmpdata->Scan0.ToPointer(), wb);
bitmap->UnlockBits(bmpdata);
ob.mat = cv_img;
return ob;
} // <------------- the error shows on this line when I compile
System::Drawing::Bitmap^ PerformSomeOperation(System::Drawing::Bitmap^ inputBitmap)
{
System::Drawing::Bitmap^ bitmap;
CustomImage ob = BitmapToCustomImage(inputBitmap);
// some stuff
// try to convert back to bitmap
return bitmap;
}
Вот как я передаю растровое изображение из C#:
Bitmap inputImage = (Bitmap)pictureBoxInput.Image;
inputImage = mylibname.PerformSomeOperation(inputImage);
Что я здесь не так делаю?
И есть ли другой способ передачи растрового изображения в приложение C ++ / CLI, кроме отправки дескриптора растрового изображения, поскольку это часто вызывает проблемы?