回答
这里是做的非常快,虽然不安全,道:
[编辑]这个例子了0.035毫秒
// Create 2D array of integers
int width = 320;
int height = 240;
int stride = width * 4;
int[,] integers = new int[width,height];
// Fill array with random values
Random random = new Random();
for (int x = 0; x < width; ++x)
{
for (int y = 0; y < height; ++y)
{
byte[] bgra = new byte[] { (byte)random.Next(255), (byte)random.Next(255), (byte)random.Next(255), 255 };
integers[x, y] = BitConverter.ToInt32(bgra, 0);
}
}
// Copy into bitmap
Bitmap bitmap;
unsafe
{
fixed (int* intPtr = &integers[0,0])
{
bitmap = new Bitmap(width, height, stride, PixelFormat.Format32bppRgb, new IntPtr(intPtr));
}
}
和结果:
如果有需要速度看my Kinect sample。基本上它创建一个内存区域,并使用一个不安全的指针向内存生成一个Int32数组。 BitmapSource对象用于将位图(图像)直接映射到同一区域。这个特殊的例子也使用非托管内存使其与P/Invoke兼容。
This blogpost描述了使用不安全的性能差异。从 部分看看:
- http://www.bytemycode.com/snippets/snippet/412/
- http://www.jmsoftware.co.uk/blog/c-snippet-for-accessing-bitmap-data-with-unsafe-code
- http://www.vcskicks.com/fast-image-processing.php
注意,您可以一样好做的Int32 [] - 指针,而不是它使用的例子字节[] - 指针。
如果速度是不是一个问题 - 位图+ SetPixel比保存到一个文件:
简单,但正如你所说:慢。令人惊讶的慢! :) – 2011-02-25 05:37:32
Bitmap.LockBits
应该工作,如果你想要一个WinForms图像。
@ozcanovunc:语法已经很完美了。你可能想阅读关于现在的进行时态。 – 2016-05-19 15:10:45
将数组投影到base64字符串中以便流入Bitmap
也会变慢吗?
- 1. 将整数的二维数组转换为灰度图像
- 2. 如何一维数组转换为二维数组在C#
- 3. 将二维数组转换为二维数组的多个块
- 4. OpenCV二维数组到图像转换
- 5. 在C#中将二维数组转换为单维?
- 6. 将二维图像转换为三维图像的算法
- 7. 将二维数组转换为二维数组列表?
- 8. 如何将c#二维数组转换为JSON对象?
- 9. 转换为二维数组
- 10. 将图像转换为二维数组,然后将图像返回到Java
- 11. 在python中将二维数组转换为三维数组
- 12. 将二维数组转换为指针
- 13. 在Python中将二进制图像转换为二维数组或矩阵?
- 14. 如何将映射转换为java中的二维数组?
- 15. 将一维数组的索引转换为二维数组
- 16. 将图像转换为二进制数组和二进制数组转换为java中的图像
- 17. 如何将二维数组转换成一个维数组
- 18. 如何在GO中将二维数组转换为一维数组?
- 19. 如何二维数组转换成一维数组中的PHP5
- 20. C#将二维数组转换为数据集/数据表
- 21. 将二维数组转换为GAMS中的一维
- 22. 将二维numpy数组转换为三维数组
- 23. 将二维数组转换为一维数组(有条件)
- 24. 将一维数组索引转换为二维数组索引
- 25. 将两个一维数组转换为单个二维数组
- 26. 将单个二维数组转换为多维数组
- 27. 将二维向量转换为二维数组
- 28. 如何将一维数组从数字转换为二维数组?
- 29. 转换二维数组多维数组
- 30. 将Fortran多维数组转换为C
WinForms或WPF? – 2011-02-25 05:37:50