我需要在用 C# 撰寫的 WPF 應用程式中顯示影像。影像內容由外部非托管庫生成,該庫自行分配光柵緩沖區。
我正在嘗試使用該方法將該緩沖區包裝在一個物件中(作為控制元件BitmapSource附加) ,但是該方法采用一個位元組陣列,而我所擁有的只是緩沖區。SourceImageCreateIntPtr
有沒有辦法從非托管緩沖區創建位元組陣列?最好不要復制?(我知道我正在做的事情是不安全的,但保證緩沖區在應用程式的整個生命周期內都會持續存在)。
或者是否有另一種方法將光柵影像從非托管緩沖區顯示到Image或Canvas物件或類似中?
更新:
我只是錯過了BitmapSource.Create需要一個超載IntPtr!(雖然我不知道這是否復制了影像。)
uj5u.com熱心網友回復:
為了從非托管的原始像素緩沖區創建 BitmapSource,請使用BitmapSource.Create方法,例如:
PixelFormat format = PixelFormats.Bgr24;
int width = 768;
int height = 576;
int stride = (width * format.BitsPerPixel 7) / 8;
int size = stride * height;
IntPtr buffer = ...
BitmapSource bitmap = BitmapSource.Create(
width, height, 96, 96, format, null, buffer, size, stride);
如果您想回圈更新 Image 元素的 Source,覆寫單個 WriteableBitmap 的緩沖區可能比在每個回圈中使用新的 BitmapSource 重新分配 Image 的 Source 可能更有效。
uj5u.com熱心網友回復:
我建議使用WriteableBitmap。雖然這確實需要一個副本,但它不需要任何分配,我希望性能完全符合實時取景的要求。
myWriteableBitmap.WritePixels(
new Int32Rect(0, 0, width, height),
bufferPointer,
bufferSize,
stride);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/466561.html
下一篇:如何有一個圓角矩形的單邊邊框?
