我正在
System.ArgumentException: 'Parameter is not valid.'
出于某种原因。
我得到它的一行:
let image = Bitmap.FromStream stream
这就是我所拥有的
let ChangeBitmapColors (bitmap : Bitmap) =
Console.WriteLine bitmap.Size
let width = bitmap.Width
let height = bitmap.Height
let rectangle = new Rectangle(0, 0, width, height)
let bitmapData = bitmap.LockBits(rectangle, Imaging.ImageLockMode.ReadOnly, bitmap.PixelFormat)
let length = bitmapData.Stride * height
let bitmapArray : byte[] = Array.zeroCreate length
Marshal.Copy(bitmapData.Scan0, bitmapArray, 0, length)
bitmap.UnlockBits bitmapData
//todo something with bitmapArray
use stream = new MemoryStream(bitmapArray)
let image = Bitmap.FromStream stream
stream.Dispose |> ignore
image
任何想法我在这里做错了什么?提前谢谢。
答案 0 :(得分:3)
我不知道为什么你的代码不能正常工作(我测试了它并得到了相同的结果)。
另一个选项(对我有用)它使用Marshal.UnsafeAddrOfPinnedArrayElement
let image = new Bitmap(width, height, bitmapData.Stride, bitmap.PixelFormat,Marshal.UnsafeAddrOfPinnedArrayElement(bitmapArray, 0))
修改强>
感谢@ildjarn的解释:
该流无法正常工作,因为它只是没有任何原始像素数据 图像标题,所以没有办法知道像图像这样的简单事物 尺寸和调色板类型。流方法是可能的,但你 需要将图像标题保存到流中,而不仅仅是 扫描线