Tôi cần vẽ hình ảnh trên thành phần Image
ở 30Hz. tôi sử dụng mã này:chuyển đổi nhanh Bitmap sang BitmapSource wpf
public MainWindow()
{
InitializeComponent();
Messenger.Default.Register<Bitmap>(this, (bmp) =>
{
ImageTarget.Dispatcher.BeginInvoke((Action)(() =>
{
var hBitmap = bmp.GetHbitmap();
var drawable = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
DeleteObject(hBitmap);
ImageTarget.Source = drawable;
}));
});
}
Vấn đề là, với mã này, sử dụng CPU của tôi là khoảng 80%, và, nếu không có sự chuyển đổi đó là khoảng 6%.
Vậy tại sao chuyển đổi bitmap quá dài?
Có phương pháp nhanh hơn (có mã không an toàn) không?
gì được hiển thị nếu không có chuyển đổi? CPU tiêu thụ là khoảng 6% mà không có bất kỳ bitmap hiển thị? – Clemens
có, máy ảnh gửi sự kiện với khung hình mới, nhưng không chuyển đổi và không có gì được hiển thị. – Epitouille
Vậy làm thế nào để bạn biết rằng không phải tất cả tiêu thụ CPU 80% chỉ được sử dụng để hiển thị 30 BitmapSources mỗi giây và chuyển đổi không mất thời gian? – Clemens