PDA

View Full Version : سوال: خطای Parameter is not valid



b_ghost2005
سه شنبه 07 تیر 1390, 12:20 عصر
سلامبرنامه ای دارم که تصاویر را از داخل یک بانک استخراج کرده و روی هارد ذخیره می کند و فایل دخیره شده روی هاردرا در بانک دیگری دخیره می کند. حجم تصاویری که روی هارد ذخیره می شود بااستفاده از کد زیر تصاویر را compression کرده سپس روی هارد ذخیره می کنم. کد زیر روی ویندوز 64 بیتی مشکلی ندارد اما روی سرور 32 بیتی خط tiff.Save(outputPath, myImageCodecInfo, myEncoderParameters); خطای Parameter is not valid می دهد. اگر در EncoderValue.CompressionCCITT4 به غیر از CCITT ها از فرمت دیگری استفاده کنم خطا دیده نمی شود اما حجم تصویر تغییر چندانی نمی کند. CCITT تصویر 512 k را به 17 k تبدیل می کند.
لطفا راهنمایی کنید.

private void PrepareImagesTifFile(ArrayList imageList, string outputPath)
{ Bitmap multi;
Bitmap page2;
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
byte[] buf = (byte[])imageList[0];
MemoryStream s = new MemoryStream(buf);
Image im;
MemoryStream bm = new MemoryStream();
s.Write(buf, 0, buf.Length);
try { im = new Bitmap(s); }
catch (Exception ex)
{ s = CompressHelper.UnzipStream(buf);
im = new Bitmap(s); }
multi = new Bitmap(im);
multi.Save(bm, ImageFormat.Tiff);
Image tiff = Image.FromStream(bm);
myImageCodecInfo = GetEncoderInfo("image/tiff");
myEncoderParameters = new EncoderParameters(2);
myEncoderParameter = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
myEncoderParameters.Param[0] = myEncoderParameter;
myEncoderParameter = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
myEncoderParameters.Param[1] = myEncoderParameter;
tiff.Save(outputPath, myImageCodecInfo, myEncoderParameters);
if (imageList.Count > 1)
{ for (int i = 1; i < imageList.Count; i++)
{ byte[] buf1 = (byte[])imageList[i];
MemoryStream s1 = new MemoryStream(buf1);
Image ip;
try { ip = new Bitmap(s1); }
catch (Exception ex) { s1 = CompressHelper.UnzipStream(buf1);
ip = new Bitmap(s1); }
page2 = new Bitmap(ip);
EncoderParameters EncoderParams = new EncoderParameters(2);
EncoderParameter SaveEncoderParam = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
EncoderParameter CompressionEncoderPram = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionCCITT4); EncoderParams.Param[0] = CompressionEncoderPram;
EncoderParams.Param[1] = SaveEncoderParam;
tiff.SaveAdd(page2, EncoderParams); } }
EncoderParameter saveencoParameter = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.Flush);
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = saveencoParameter;
tiff.SaveAdd(encoderParams); }