필자는 배열의 모든 행을 패딩하여 필요한 형식으로 변환하는 간단한 샘플을 작성했습니다. 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));
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;
}
출처
2012-12-30 17:31:03
Mir
적어도 너비가 4의 배수 인 이미지를 사용하여 스트라이드가 중요하지 않도록 테스트 해보십시오. 일단 체크 아웃하면 LockBits를 사용하고 한 번에 한 줄씩 복사하여 비 호환성 문제를 해결해야합니다. –
24 비트 비트 맵의 경우 스트라이드는 명시한대로 4 바이트의 배수 여야합니다. 따라서 24 비트 비트 맵의 보폭은 stride = (((width * 3) + 3)/4) * 4 입니다. 물론 원시 데이터도 마지막에 필요한 모든 패딩으로 포맷해야합니다 각 행의 – Dampsquid