net 카메라의 버퍼에서 비트 맵을 가져오고 있습니다. 이것들을 PictureBox에 할당하면 빨강과 파랑이 바뀝니다.BGR 비트 맵을 RGB로 변환
빨간색과 파란색을 적절한 위치에 가져 오려면 비트 맵이나 PictureBox에 무엇을 할 수 있습니까?
net 카메라의 버퍼에서 비트 맵을 가져오고 있습니다. 이것들을 PictureBox에 할당하면 빨강과 파랑이 바뀝니다.BGR 비트 맵을 RGB로 변환
빨간색과 파란색을 적절한 위치에 가져 오려면 비트 맵이나 PictureBox에 무엇을 할 수 있습니까?
다음 코드는 필요한 변환을 수행합니다 액세스하고 직접 내용을 변경할 수 있도록
public static void RGBtoBGR(Bitmap bmp)
{
BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite, bmp.PixelFormat);
int length = Math.Abs(data.Stride) * bmp.Height;
unsafe
{
byte* rgbValues = (byte*)data.Scan0.ToPointer();
for (int i = 0; i < length; i += 3)
{
byte dummy = rgbValues[i];
rgbValues[i] = rgbValues[i + 2];
rgbValues[i + 2] = dummy;
}
}
bmp.UnlockBits(data);
}
LockBits
메모리에 비트 맵을 잠급니다. 안전하지 않은 컨텍스트를 갖고 싶지 않은 경우 바이트 배열을 만들고 Marshal.Copy
을 사용하여 데이터를 복사 한 다음 조작 후 다시 비트 맵으로 복사 할 수 있습니다. LockBits
을 사용하면 비트 맵 데이터를 조작하는 가장 빠른 옵션입니다 (GetPixel
또는 SetPixel
보다 훨씬 빠름).
루프 반복자 (i += 3
)는 비트 맵의 PixelFormat
에 따라 다릅니다. 여기서는 PixelFormat.Format24bppRgb
이라고 가정합니다. Format32bppArgb
의 경우 i += 4
이됩니다.
카메라에 몇 가지 문제가 있습니까? –
카메라에 문제가 없습니다. 그것은 BGR 색 공간입니다. 대부분 엔디안 니스와 관련이 있습니다. 하지만 성가 시게하는 일은 일을하기 위해서 보통 여분의 일을해야하기 때문입니다. – Kat