我知道每个像素的rgb值,如何在C#中通过这些值创建图片?我见过这样的例子:
CKEDITOR.replace( 'YourEditor',
{
on:
{
instanceReady : function( evt )
{
//Set the focus to your editor
CKEDITOR.instances.YourEditor.focus();
}
}
}
但它不起作用。 我有一个像这样的二维数组:
1 3 1 2 4 1 3 ...
2 3 4 2 4 1 3 ...
4 3 1 2 4 1 3 ...
...
每个数字对应于rgb值,例如,1 => {} 244,166,89 2 => {54,68,125}
答案 0 :(得分:2)
我尝试使用以下代码,该代码使用调色板的256个Color
条目数组(您必须提前创建并填充此代码):
public Bitmap GetDataPicture(int w, int h, byte[] data)
{
Bitmap pic = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
for (int x = 0; x < w; x++)
{
for (int y = 0; y < h; y++)
{
int arrayIndex = y * w + x;
Color c = palette[arrayIndex];
pic.SetPixel(x, y, c);
}
}
return pic;
}
我倾向于迭代像素,而不是数组,因为我发现读取双循环比单循环和模/除操作更容易。
答案 1 :(得分:0)
您的解决方案非常靠近工作代码。只需要“调色板” - 即3元素字节数组,其中每个3字节元素包含{R,G,B}值。
//palette is a 256x3 table
public static Bitmap GetPictureFromData(int w, int h, byte[] data, byte[][] palette)
{
Bitmap pic = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
Color c;
for (int i = 0; i < data.Length; i++)
{
byte[] color_bytes = palette[data[i]];
c = Color.FromArgb(color_bytes[0], color_bytes[1], color_bytes[2]);
pic.SetPixel(i % w, i / w, c);
}
return pic;
}
此代码适用于我,但速度非常慢。
如果您创建BMP文件的内存“映像”然后使用Image.FromStream(MemoryStream(“image”)),它的代码将更快,但它更复杂的解决方案。