У меня есть изображение ImageSharp Image, которое уже загружено в память, и мне нужно преобразовать его в объект SkiaSharp SkImage, чтобы передать его в библиотеку, которую я использую . Я хотел бы использовать уже загруженные байты, чтобы избежать повторного обращения к диску без необходимости. Если бы я мог повторно использовать байтовые/пиксельные данные напрямую, это было бы здорово, но я не против, если мне придется временно скопировать байты и для создания SkImage.
Я пробовал несколько вещей, например следующие, но немного сомневаюсь и не уверен, что это правильный подход:
Код: Выделить всё
public Task DoThingsWithImage(Image imageSharpImage)
{
byte[] pixelBytes = new byte[imageSharpImage.Width * imageSharpImage.Height * Unsafe.SizeOf()];
imageSharpImage.CopyPixelDataTo((pixelBytes));
var skImage = SKImage.FromEncodedData(pixelBytes);
// Do something with skImage here
}
В качестве альтернативы, если проще пойти другим путем, т. е. загрузить изображение как SkImage, а затем преобразовать его в ImageSharp Image, который тоже будет работать. Мое приложение обрабатывает конвейер операций, некоторые из которых используют ImageSharp, а некоторые — SkiaSharp, поэтому не имеет большого значения, что я использую для загрузки изображения с диска.
Я использую .Net 9 и последние версии ImageSharp и SkiaSharp.
Спасибо!
Подробнее здесь:
https://stackoverflow.com/questions/790 ... rp-skimage