我试图从原始字节创建位图对象时,我的PixelFormat是RGB每个样品的8位,这是每个像素3个字节.现在为此我的stide将是宽度的3倍.
但是Bitmap班级总是在寻找乘数为4的乘数.请帮我解决这个问题.如果我给4的乘数图像不正确.
Bitmap im = new Bitmap(MyOBJ.PixelData.Columns, MyOBJ.PixelData.Rows, (MyOBJ.PixelData.Columns*3),
System.Drawing.Imaging.PixelFormat.Format24bppRgb, Marshal.UnsafeAddrOfPinnedArrayElement(images[imageIndex], 0));
Run Code Online (Sandbox Code Playgroud)
我写了一个简短的示例,它将填充数组的每一行以使其适应所需的格式.它将创建一个2x2检查板位图.
byte[] bytes =
{
255, 255, 255,
0, 0, 0,
0, 0, 0,
255, 255, 255,
};
var columns = 2;
var rows = 2;
var stride = columns*4;
var newbytes = PadLines(bytes, rows, columns);
var im = new Bitmap(columns, rows, stride,
PixelFormat.Format24bppRgb,
Marshal.UnsafeAddrOfPinnedArrayElement(newbytes, 0));
Run Code Online (Sandbox Code Playgroud)
该PadLines方法如下.我试图通过使用Buffer.BlockCopy以防你的位图很大来优化它.
static byte[] PadLines(byte[] bytes, int rows, int columns)
{
//The old and new offsets could be passed through parameters,
//but I hardcoded them here as a sample.
var currentStride = columns*3;
var newStride = columns*4;
var newBytes = new byte[newStride*rows];
for (var i = 0; i < rows; i++)
Buffer.BlockCopy(bytes, currentStride*i, newBytes, newStride * i, currentStride);
return newBytes;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5183 次 |
| 最近记录: |