간단한 CImg 이미지를 생성하고 그 위에 원을 그리는 C++/CLI 코드가 있습니다. C#으로 전달하고 싶지만 어떻게해야할지 모르겠다. 바이트 배열을 사용하여 C#으로 전달하는 방법을 생각했지만 바이트 길이 *에서 바이트 []로 변환하거나 관리되지 않는 메모리 스트림으로 전달하는 데 필요한 배열의 길이를 가져올 수 없습니다. 나는 strlen 함수를 사용하여 시도했지만, 그건 그냥 여기에 0CImg 이미지 객체를 C++/CLI에서 C#으로 전달하는 방법
을 반환 내 C++ 코드 :
unsigned char* calculateFrame::ReadImage() {
CImg<unsigned char> testImage(1920, 1080, 1, 3, 0);
const unsigned char white[3] = { 255,255,255 };
testImage.draw_circle(256, 256, 200, white, 1.0f, ~0U);
testImage.draw_point(500, 500, white, 255);
unsigned char* charArray = (unsigned char*)testImage;
return charArray;
}
C# 코드 :
Bitmap testBmp;
using(var test = new FrameCalculator.calculateFrame())
{
Console.WriteLine(test.calculateOneFrame(3));
unsafe
{
byte* imageArray = test.ReadImage();
using(var ms = new UnmanagedMemoryStream(imageArray , /* length of byte* (unknown) */))
{
testBmp = new Bitmap(ms);
}
}
}
당신은 주변에 안전하지 않은 코드를 얻기 위해 어떤 트릭이있는 경우 퍼포먼스를 희생시키지 않으면 좋겠지 만, 안전하지 않은 코드를 사용하는 것에 반대하지는 않습니다.