在类里面我正在做的事情是:
private static Bitmap bmp2 = new Bitmap(@"C:\Temp\New folder (17)\radar001486.GIF");
然后在我正在做的一种方法内:
private void test()
{
int current_list_length = pointtocolor.Count;
for (int kk=0;kk<current_list_length;kk++)
{
PointF pt = pointtocolor[kk];
e.FillEllipse(cloudColors[cloudColorIndex], pt.X * (float)currentFactor, pt.Y * (float)currentFactor, radius, radius);
bmp2.SetPixel((int)pt.X * (int)currentFactor, (int)pt.Y * (int)currentFactor, Color.Yellow);
}
bmp2.Save(@"c:\temp\yellowbmpcolor.bmp");
}
一旦进入循环,就会在行上产生异常:
bmp2.SetPixel((int)pt.X * (int)currentFactor, (int)pt.Y * (int)currentFactor, Color.Yellow);
如果我将更改bmp2的实例从:
private static Bitmap bmp2 = new Bitmap(@"C:\Temp\New folder (17)\radar001486.GIF");
至
private static Bitmap bmp2 = new Bitmap(512,512);
然后它将工作,但我想SetPixel在原始的radar001486.GIF上的像素,而不是在新的空位图上。
最佳答案
问题是您正在使用GIF,因为它具有索引像素。如果可以的话,尝试将其转换为png;或者,如果不能这样做,请使用以下方法将其转换为未编入索引的图像:
public Bitmap CreateNonIndexedImage(Image src)
{
Bitmap newBmp = new Bitmap(src.Width, src.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (Graphics gfx = Graphics.FromImage(newBmp)) {
gfx.DrawImage(src, 0, 0);
}
return newBmp;
}
注意:如果您可以选择这样做(例如,未下载的图像,或者您可以访问服务器),请一定将这些图像转换为PNG。
关于c# - 为什么在使用SetPixel : SetPixel is not supported for images with indexed pixel formats?时出现异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25984458/