CGImageRef не найден при привязке библиотеки stati c к Xamarin. iOS - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь связать некоторую библиотеку * .framework, которая (среди прочего) использует CoreGraphics. Итак, код, сгенерированный Sharp ie, выглядит следующим образом:

    // +(CGImageRef)rotateCGImage:(CGImageRef)image byRadians:(double)radians;
    [Static]
    [Export ("rotateCGImage:byRadians:")]
    unsafe CGImageRef* RotateCGImage (CGImageRef* image, double radians);

Однако, при попытке его построить, я получаю сообщение об ошибке типа «CGImageRef not found». Кроме того, я не могу найти соответствующий класс в списке членов CoreGraphics в Assembly Explorer. (Точно так же, как using CoreGraphics; не помогает.)

Похоже, этот класс (или структура) просто не поддерживается Mono: я просто не могу найти его в обычных iOS библиотеках проектов, ни .

И на самом деле, существует ряд похожих "ref-like" классов, которые пропущены: CMSampleBufferRef из Core Media, CVImageBufferRef из Core Video et c.

Итак, как я могу справиться с этой ситуацией?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Из того, что я обнаружил (и один из подходов, которые Xamarin использует внутри своей структуры), решение выглядит следующим образом:

    static extern CGImagePixelFormatInfo CGImageGetPixelFormatInfo (/* __nullable CGImageRef */ IntPtr handle);

    static extern IntPtr /* CFStringRef */ CGImageGetUTType (/* __nullable CGImageRef* */ IntPtr image);

Итак, из-за C# управляемой архитектуры, нет явных указателей для реализации, поэтому они просто не создали * классы, похожие на ссылки в Mono.

Единственное, на что следует указать, это то, что они пропускают IntPtr для обоих случаев: CGImageRef и CGImageRef*, что, конечно, имеет смысл. Однако хитрость заключается в том, чтобы правильно передать указатель CGImage внутри вызывающего метода, потому что в первом случае это должно быть так:

    image == null ? IntPtr.Zero : image.Handle

, так, передав указатель CGImage. Но во втором случае это должен быть указатель на Handle, я полагаю.

0 голосов
/ 13 февраля 2020

Пожалуйста, попробуйте решение в этой теме :

CGImageRef не существует в Xamarin. В Obj- C, CGImageRef - это просто указатель на CGImage, поэтому я думаю, что вы можете просто изменить все эти CGImageRef на CGImage.

Я думаю, что это должно быть примерно так:

[Static]
[Export("rotateCGImage:byRadians:")]
unsafe CGImage RotateCGImage(CGImage image, double radians);

То же самое с другими "...Ref" в вашем проекте.

...