您可以将位图转换为字节数组。尝试这样的事情(看起来很黑客,但我不知道另一种方法):
int pixelSize = 3;
int bytesCount = imgHeight * imgWidth * pixelSize;
byte[] byteArray= new byte[bytesCount];
BitmapData bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, imgWidth, imgHeight), ImageLockMode.ReadOnly, bitmap.PixelFormat);
Marshal.Copy(bitmapData.Scan0, byteArray, 0, bytesCount);
该数组中的每个像素由 3 个字节表示(这取决于位图类型)。所以你知道位图行的长度是 3 * imgWidth。使用它,您可以简单地在字节数组中导航并将您需要的内容复制到新数组中。
然后,您将创建一个具有所需最终大小的新位图,获取位图数据并 Marshal.Copy 新数组到其中:
Bitmap newBitmap = new Bitmap(Width, Height);
BitmapData newBitmapData = b.LockBits(BoundsRect,
ImageLockMode.WriteOnly,
newBitmap.PixelFormat);
Marshal.Copy(newByteArray, 0, newBitmapData.Scan0, newBytesCount);
最后解锁位图:
newBitmap.UnlockBits(newBitmapData );
bitmap.UnlockBits(bitmapData);
希望这可以帮助。干杯。