Tôi cần viết ứng dụng để phát lại hình ảnh đa khung hình DICOM. Mỗi khung hình được lưu trữ ở định dạng JPEG. Tất cả các khung hình được lưu trữ liên tục trong một tập tin. Ngay bây giờ, tôi đọc ra từng khung dữ liệu và vượt qua nó để các thói quen sau đây để xây dựng một Bitmap để trưng bày:Cách nhanh nhất để giải nén ảnh JPEG trong C#
Bitmap CreateBitmap(byte[] pixelBuffer, int frameSize)
{
Bitmap image = null;
try
{
long startTicks = DateTime.Now.Ticks;
MemoryStream pixelStream = new MemoryStream(pixelBuffer, 0, frameSize);
image = new Bitmap(pixelStream);
loadTime = DateTime.Now.Ticks - startTicks;
}
catch (Exception ex)
{
Log.LogException(ex);
}
return image;
}
Trong kiểm tra, mọi thứ hoạt động tốt, ngoại trừ rằng hiệu suất trong các thói quen trên là không tối ưu. Đối với kích thước khung hình 800x600, thời gian trong quy trình này là 0msec và 15msec (tôi không biết tại sao). Đối với kích thước khung 1024x768, thời gian cần là 15msec hoặc 31msec. Mục tiêu của tôi là truyền dữ liệu hình ảnh vào và phát lại hình ảnh (phiên bản 1024x768) ở 60Hz mà không làm rơi khung hình. Điều đó cho thấy tôi phải giải nén khung JPEG trong 15msec liên tục. Vì vậy, câu hỏi của tôi là cách tốt hơn để làm điều này là gì?
Cảm ơn! Bạn có thể cho tôi một ví dụ về cách vẽ BitmapFrame được trả về bởi JpegBitmapDecoder không? Tôi không thể sử dụng Graphics.DrawImage() trong OnPaint() nữa. – JohnY
Vẽ hình ảnh WPF bằng GDI + sẽ là một cơn đau. Nếu bạn phải kết xuất với WinForms, hãy gắn bó với các lớp GDI +. –