하드 디스크에 여러 개의 (~ 2GB) 원시 24bpp RGB 파일이 있습니다. 이제 그 중 일부를 검색하여 원하는 크기로 조정하려고합니다.
(허용되는 눈금은 1, 1/2, 1/4, 1/8, ..., 1/256)C# System.Drawing.Bitmap에서 효율적으로 픽셀 데이터 얻기
그래서 현재 관심있는 사각형의 모든 라인을 배열로 읽습니다 , 높이가 있지만 너비가 잘못된 비트 맵을 남겨 둡니다.
다음 단계로 새로 만든 배열에서 비트 맵을 만듭니다.
데이터를 복사하지 않으므로 포인터를 사용하여이 작업을 수행합니다.
다음 올바른 크기로 새 비트 맵을 만드는 비트 맵에서 GetThumbnailImage를 호출합니다.
이제 새로 만든 비트 맵의 원시 픽셀 데이터 (바이트 배열로)를 반환하고 싶습니다. 그러나이를 달성하기 위해 현재 LockBits를 사용하여 데이터를 새로운 배열에 복사하고 있습니다.
내 질문은 : 픽셀 데이터를 복사하지 않고 비트 맵에서 바이트 배열로 가져 오는 방법이 있습니까? 같은
뭔가 :
var bitmapData = scaledBitmap.LockBits(...)
byte[] rawBitmapData = (byte[])bitmapData.Scan0.ToPointer()
scaledBitmap.UnlockBits(bitmapData)
return rawBitmapData
나는이 작동하지 않는 것을 잘 알고 있어요, 그것은 기본적으로 내가 무엇을 달성하고자하는 단지 예입니다.
작동하려면 안전하지 않은 {} void *에서 byte [] 대신 IntPtr ptr = bitmapData.Scan0; int bytes = Math.Abs (bitmapData.Stride) * bitmapData.Height; raw = 새 바이트 [바이트]; Marshal.Copy (ptr, raw, 0, bytes); return raw; // byte [] – antonio