这是我给图片加水印的一个方法:
public Image CreateWater(Stream InputStream)
        {
            Image OrgImage = Image.FromStream(InputStream);
            Graphics g = Graphics.FromImage(OrgImage);
            g.CompositingQuality = CompositingQuality.HighQuality;
            g.SmoothingMode = SmoothingMode.HighQuality;
            Bitmap WaterImage = new Bitmap(OrgImage.Width, OrgImage.Height);
            Graphics wg = Graphics.FromImage(WaterImage);
            wg.CompositingQuality = CompositingQuality.HighQuality;
            wg.SmoothingMode = SmoothingMode.HighQuality;
            try
            {
                if (SystemConfig.Water == WaterStatus.Font)
                {
                    wg.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                    SolidBrush Front = new SolidBrush(Color.FromName(SystemConfig.MarkFontColor));
                    Font Word = new Font(SystemConfig.MarkFontFamily, SystemConfig.MarkFontSize
                        , (FontStyle.Regular), GraphicsUnit.Pixel);
                    StringFormat sf = this.GetFontPostion(SystemConfig.MarkPostion);
                    try
                    {
                        wg.DrawString(SystemConfig.MarkFont, Word, Front, new Rectangle(0, 0
                            , WaterImage.Width, WaterImage.Height), sf);
                        if (SystemConfig.MarkOpacity > 0)
                        {
                            g.DrawImage(WaterImage, new Rectangle(0, 0, WaterImage.Width, WaterImage.Height)
                                , 0, 0, WaterImage.Width, WaterImage.Height, GraphicsUnit.Pixel
                                , this.MakeOpaticy((float)SystemConfig.MarkOpacity));
                        }
                        else
                        {
                            g.DrawImage(WaterImage, new Rectangle(0, 0, WaterImage.Width, WaterImage.Height)
                                , 0, 0, WaterImage.Width, WaterImage.Height, GraphicsUnit.Pixel);
                        }
                    }
                    finally
                    {
                        sf.Dispose();
                        Word.Dispose();
                    }
                    
                }
                else if (SystemConfig.Water == WaterStatus.Image && !String.IsNullOrWhiteSpace(SystemConfig.MarkImage))
                {
                    string ImagePath = SystemConfig.MarkImage.Replace("/", @"\");
                    if (ImagePath.StartsWith(@"\"))
                    {
                        ImagePath = ImagePath.Substring(1);
                    }
                    ImagePath = Path.Combine(HttpRuntime.AppDomainAppPath, ImagePath);
                    WaterImage = new Bitmap(ImagePath);
                    Point[] fpos = this.GetImagePos(SystemConfig.MarkPostion, OrgImage.Width
                        , OrgImage.Height, WaterImage.Width, WaterImage.Height);
                    if (SystemConfig.MarkOpacity > 0)
                    {
                        Rectangle r = new Rectangle(0, 0, WaterImage.Width, WaterImage.Height);
                        g.DrawImage(WaterImage, fpos, r, GraphicsUnit.Pixel
                            , this.MakeOpaticy((float)SystemConfig.MarkOpacity));
                    }
                    else
                    {
                        g.DrawImage(WaterImage, fpos);
                    }
                }
                return OrgImage;
            }
            finally
            {
                wg.Dispose();
                WaterImage.Dispose();
                g.Dispose();
            }
        }
这是我保存图片的方法:
private bool SaveFile(Stream InputStream, string FileName, LoadFileType Ftype)
        {
            MemoryStream Fstream = new MemoryStream();
            if (Ftype == LoadFileType.Image && SystemConfig.Water != WaterStatus.Closed)
            {
                WaterMask wm = new WaterMask();
                using (Image img = wm.CreateWater(InputStream))
                {
                    img.Save(Fstream, img.RawFormat);
                }
            }
            else
            {
                Fstream = InputStream as MemoryStream;
            }
            if (this.SiteUrl.Equals("Local"))
            {
                string SavePath = Path.Combine(HttpRuntime.AppDomainAppPath
                    , FileName.Substring(1)).Replace("/", "\\");
                if (!Directory.Exists(Path.GetDirectoryName(SavePath)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(SavePath));
                }
                FileStream fs = new FileStream(SavePath, FileMode.Create, FileAccess.Write);
                try
                {
                    byte[] ReadBytes = new byte[1024];
                    int ReadCount = Fstream.Read(ReadBytes, 0, ReadBytes.Length);
                    while (ReadCount > 0)
                    {
                        fs.Write(ReadBytes, 0, ReadCount);
                        ReadCount = Fstream.Read(ReadBytes, 0, ReadBytes.Length);
                    }
                }
                catch (Exception ex)
                {
                    this.Error = ex.ToString();
                    return false;
                }
                finally
                {
                    fs.Dispose();
                    Fstream.Dispose();
                }
            }
            else if (!String.IsNullOrWhiteSpace(this.FtpUser)
                && !String.IsNullOrWhiteSpace(this.FtpPass))
            {
                FtpOperation ftp = new FtpOperation(this.SiteUrl, this.FtpUser, this.FtpPass);
                ftp.UpLoadFile(FileName, Fstream, false);
            }
            return true;
        }
问题来了,Fstream在调用CreateWater后不可以Read(),也就是Fstream.Read(ReadBytes, 0, ReadBytes.Length)等于0.但是可以用Fstream.ToArray()返回bytes数组.这是为什么啊   谢谢大侠们帮我看看啊。郁闷