在类里面我正在做的事情是:

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/

10-11 18:59