簡體   English   中英

如何將 CImg 圖像對象從 C++/CLI 傳遞到 C#

[英]How Do I Pass a CImg Image Object from C++/CLI to C#

我有一些 C++/CLI 代碼,可以創建一個簡單的 CImg 圖像並在其上繪制一個圓圈。 我想將它傳遞給 C#,但我不確定如何傳遞。 我想過使用字節數組將它傳遞給 C#,但我無法獲得數組的長度,這是從 byte* 到 byte[] 的任何轉換或傳遞到非托管內存流所需要的。 我試過使用 strlen,但它只返回 0。

這是我的 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);
                }
            }
        }

如果您有任何技巧可以在不犧牲性能的情況下繞過不安全代碼,那就太好了,但我不反對在必要時使用不安全代碼。

我最終決定將來需要一個幀緩沖區,這需要將幀寫入磁盤,以便它們不會在重新啟動時丟失。

無論如何,我的解決方案是將圖像作為 .BMP 寫入磁盤並使用 C# 中的 Image.FromFile 訪問它。 在大多數情況下,這不是一個很好的方法,因為它增加了很多開銷,但在我的程序中是有意義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM