Tôi đang cố gắng để có được một bitmap được tạo ra từ dữ liệu thô để hiển thị trong WPF, bằng cách sử dụng một hình ảnh và một BitmapSource:Tại sao BitmapSource.Create lại ném một ArgumentException?
Int32[] data = new Int32[RenderHeight * RenderWidth];
for (Int32 i = 0; i < RenderHeight; i++)
{
for (Int32 j = 0; j < RenderWidth; j++)
{
Int32 index = j + (i * RenderHeight);
if (i + j % 2 == 0)
data[index] = 0xFF0000;
else
data[index] = 0x00FF00;
}
}
BitmapSource source = BitmapSource.Create(RenderWidth, RenderHeight, 96.0, 96.0, PixelFormats.Bgr32, null, data, 0);
RenderImage.Source = source;
Tuy nhiên các cuộc gọi đến BitmapSource.Create ném một ArgumentException, nói rằng "Giá trị không nằm trong phạm vi dự kiến ". Đây không phải là cách để làm điều này? Tôi không thực hiện cuộc gọi đó đúng cách?
Cảm ơn bạn, nhưng bạn đã nghĩ ra cách diễn đạt như thế nào trên trái đất? Tại sao nó không chỉ đơn giản là RenderWidth * 4? Không phải là số byte cho một dòng? –
Xin lỗi, tôi đã cung cấp chi tiết. Trong trường hợp của bạn, bạn có 'bpp = 32' để có công thức giảm xuống' RenderWidth * 4'. Nhưng có những trường hợp lẻ (màn hình LCD giá rẻ sử dụng 18 bpp) và thực tế là các đường quét phải được căn chỉnh trên các ranh giới 32 bit. Tôi đã cung cấp công thức chung và một lời giải thích về cách thức đưa ra nó ở trên. Hy vọng nó làm sáng tỏ. – jason
Cảm ơn bạn. Một câu hỏi nữa. Dấu ngã làm gì trên một số nguyên như vậy? –