首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

答案

2012-08-22 
在线等答案!C# codebool b_Flag falseif (Directory.Exists(s_FolderPath)){System.Drawing.Imaging.En

在线等答案!

C# code
            bool b_Flag = false;            if (Directory.Exists(s_FolderPath))            {                System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.SaveFlag;                EncoderParameters ep = null;                ImageCodecInfo info = GetEncoderInfo("image/tiff");                foreach (string FileName in Directory.GetFiles(s_FolderPath))                {                    string s_FileClass = GetFileType(FileName);                    switch (s_FileClass)                    {                        case "6677":                        case "255216":                        case "7173":                        case "7373":                            b_Flag = false;                            using (Image image = Image.FromFile(FileName))                            {                                FrameDimension Myguid = new FrameDimension(image.FrameDimensionsList[0]);                                int Count = image.GetFrameCount(Myguid);                                if (Count > 1)                                {                                    for (int i = 0; i < Count; i++)                                    {                                        b_Flag = true;                                        image.SelectActiveFrame(Myguid, i);                                        if (image.PixelFormat == PixelFormat.Format1bppIndexed)                                        {                                            ep = new EncoderParameters(3);                                            ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);                                            ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 0L);                                            ep.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 1L);                                        }                                        else                                        {                                            ep = new EncoderParameters(1);                                            ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW);                                        }                                        using (Bitmap bitmap = new Bitmap(image, image.Width, image.Height))                                        {                                            BitmapData bmData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);                                            bitmap.UnlockBits(bmData);                                            bitmap.Save(FileName.Substring(0, FileName.LastIndexOf(".")) + "_" + i.ToString() + ".tif",info,ep);                                        }                                    }                                }                            }                            if (b_Flag)                            {                                File.Delete(FileName);                            }                            break;                        default:                            break;                    }                }            }


压缩Tif格式的代码,在本机运行没有任何问题,部署到服务器上就报错:A generic error occurred in GDI+.框架是4.0

[解决办法]
在你绘图的地方加一些调试信息吧,网上有很多关于这个错误的解决办法,不知道适不适合你,http://www.cnblogs.com/johnz/archive/2008/03/06/1092931.html
[解决办法]
创建Index or Non-Indexed Image , 用Graphics.DrawImage() 来copy Image到一个新建立的Bitmap 对象然后多这个新的Image 执行Resize




Sample Code:

C# code
 Bitmap bm1=(Bitmap)Image.FromFile("doodaa.gif"); Bitmap bm2=new Bitmap(bm1.Width,bm1.Height); Graphics g=Graphics.FromImage(bm2); g.DrawImageUnscaled(bm1,0,0); //bm2 now contains a non-indexed version of the image. //Now draw the X.. g.DrawLine(blah-blah.); g.DrawLine(blah-blah.); //get rid of the graphicsg.Dispose();//and save a new gifbm2.Save("foobar.gif",ImageFormat.Gif);
[解决办法]
把服务器上的.net版本更新到跟你本机一致。
[解决办法]
A generic error occurred in GDI+
这个错误之前在做图片压缩的时候遇到过一次,就是在设置参数时出的问题
C# code
ep = new EncoderParameters(3);ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 0L);ep.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.ColorDepth, 1L); 

热点排行