什么定义一个共用画板跟画布,上传图片并生成

时间:2019-12-19 07:08来源:365bet亚洲官方投注
后台代码:  在开垦.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+中发出平时性错误”的发生,平日常有以下几种原因: 要么有未有大神能够引导一下笔者,作者曾经在做一个

365bet亚洲官方投注 1

后台代码:

 在开垦.NET应用中,使用 System.Drawing.Image.Save 方法而导致“GDI+ 中发出平时性错误”的发生,平日常有以下几种原因:

要么有未有大神能够引导一下笔者,作者曾经在做一个拼图软件,我想创立三个公家的画布,让其余Picturebox能够而且调用这一个画布,举个例子2X2的拼图格式,作者就把这幅画布平均分为多个部分,每参与生龙活虎副图片,就在这里公共画布的三分一区域投入意气风发副图片,如图所示但是本人不会领会哪些定义壹个公家的画布最近必须要在一个单身的平地风波里独自的创造二个画板,笔者加多第三个图片就产生那样,如图所示那是自己的代码:privatevoidPictureBox1_Click(objectsender,EventArgse卡塔尔国{OpenFileDialogfile=newOpenFileDialog(卡塔尔国;file.InitialDirectory=".";file.Filter="图片格式(*.jpg)|*.jpg|(*.bmp)|*.bmp|(*.png)|*.png";file.ShowDialog();if(file.FileName!=string.Empty卡塔尔国{try{pathname1=file.FileName; //得到文件的相对路线this.PictureBox1.Load(pathname1卡塔尔国;}catch(Exceptionex卡塔尔国{MessageBox.Show(ex.Message卡塔尔(قطر‎;}SaveFileDialogsave=newSaveFileDialog(卡塔尔国;}stringstr1=pathname1;str1.Replace(@"","/"卡塔尔(英语:State of Qatar);Imageimg1=Image.FromFile(""+str1+""卡塔尔国;Bitmapmap1=newBitmap(img1卡塔尔国;varwidth=img1.Width;varheight=img1.Height;;//发轫化画布(最后的拼图画布卡塔尔并设置宽高BitmapbitMap=newBitmap(width*2,height*2卡塔尔国;//开端化画板Graphicsg1=Graphics.FromImage(bitMap卡塔尔;//将画布涂为浅紫(尾部颜色可活动安装卡塔尔国g1.FillRectangle(Brushes.White,newRectangle(0,0,width,height卡塔尔卡塔尔国;//在x=0,y=0处画上海体育场地生机勃勃g1.DrawImage(map1,0,0,img1.Width,img1.Height卡塔尔国;//在x=0,y在图一往下10像素处画上航海用教室二map1.Dispose(卡塔尔(قطر‎;//map2.Dispose(卡塔尔;Imageimg=bitMap;pictureBox3.Image=img;textBox1.Text=pathname1;}privatevoidPictureBox2_Click(objectsender,伊芙ntArgse卡塔尔国{OpenFileDialogfile=newOpenFileDialog(卡塔尔(قطر‎;file.InitialDirectory=".";file.Filter="图片格式(*.jpg)|*.jpg|(*.bmp)|*.bmp|(*.png)|*.png";file.ShowDialog();if(file.FileName!=string.Empty卡塔尔(قطر‎{try{pathname2=file.FileName; //拿到文件的相对路线this.pictureBox2.Load(pathname2卡塔尔(英语:State of Qatar);}catch(Exceptionex卡塔尔国{MessageBox.Show(ex.Message卡塔尔(قطر‎;}SaveFileDialogsave=newSaveFileDialog(卡塔尔(قطر‎;stringstr2=pathname2;str2.Replace(@"","/");Imageimg2=Image.FromFile(""+str2+"");Bitmapmap2=newBitmap(img2);varwidth=img2.Width;varheight=img2.Height;;BitmapbitMap=newBitmap(width*2,height*2卡塔尔国;//最初化画板Graphicsg1=Graphics.FromImage(bitMap卡塔尔国;g1.DrawImage(map2,0,height,img2.Width,img2.Height卡塔尔国;map2.Dispose(卡塔尔(قطر‎;Imageimg=bitMap;pictureBox3.Image=img;}}麻烦各位教导一下

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Data.SqlClient;
usingSystem.IO;//注意把那一个加上
usingSystem.Drawing;//注意把那一个加上

  1. 相应的帐户未有写权限。
    清除办法:赋予 NETWO宝马X3K SEPAJEROVICE 帐户以写权限。
  2. 钦赐的大意路线荒诞不经。
    解决措施:
    在调用 Save 方法早前,先推断目录是还是不是留存,若不设有,则开创。
    if (!Directory.Exists(dirpath))
    Directory.CreateDirectory(dirpath);
  3. 封存的文件已存在并因某种原因被锁定。
    减轻格局:
    重启IIS,消灭锁定。并在代码中动用 using 语句,确定保障释放 Image 对象所选择的具有财富。

publicpartialclassPhotoPage:System.Web.UI.Page
{
SqlConnectionsqlCon=newSqlConnection;
SqlCommandsqlCom=newSqlCommand();
protectedvoidPage_Load(objectsender,EventArgse)
{

自身境遇的情事:
      在先用openFileDialog展开图片文件,然后用saveFileDialog保存文件时就现身了 “GDI+中产生平时性错误”,作者随时就悟出是开辟的文件还没释放出来,于是用openFileDialog1.Dispose(卡塔尔国来刑满释放解除劳教,不过未有得逞。雷同从一个MemorySream 实例张开叁个Image后,即刻关闭了这么些流,结果在Image.Save时也会发出这种似是而非。小编“摆渡”了非常久皆以遇上和本身同样难点的人,CSDN上边的老同志也从未付诸一个实用的答案。最后到底依然在微软的网址上找到了答案:(以下是合法化解办法)
症状
Bitmap 对象或一个 图像 对象从三个文件, 布局时该公文仍保留锁定对于指标的生存期。 因而, 不可能改动图像并将其保存回它发出同样的文书。

}

替代它方式
•    创造非索引印象。
•    创造索引映像。
那二种情状下, 原始 位图 上调用 Bitmap.Dispose(卡塔尔(قطر‎方法删除该文件上锁或删除必要, 流或内部存款和储蓄器保持活动。

  //生成图片代码
protectedvoidbtnOK_Click(objectsender,EventArgse)
{
stringP_str_filePath="";//定义贰个在客商端文件的门径的变量
stringP_str_fileExtName="",P_str_mFileName,P_str_mPath;//文件的扩大名
System.Text.StringBuilderstrMsg=newSystem.Text.StringBuilder("上传图片;<hrcolor=red>"卡塔尔;
if(fileUp.PostedFile.FileName!=""卡塔尔//fileUp是控件fileload控件的称呼那句是取控件的文件名称
{
P_str_filePath=fileUp.PostedFile.FileName;//获取图片路线
P_str_fileExtName=P_str_filePath.Substring(P_str_filePath.LastIndexOf;//获取扩展名
try
{
365bet亚洲官方投注,P_str_mPath=Server.MapPath("Images/Pictures/"卡塔尔(英语:State of Qatar);//获取服务器端的文本的渠道
P_str_mFileName=P_str_filePath.Substring(P_str_filePath.LastIndexOf;//获取文件的称号
fileUp.PostedFile.SaveAs(P_str_mPath+P_str_mFileName卡塔尔(英语:State of Qatar);//保存到制定的门路下

创办非索引图像
哪怕原始影象被索引格式中该办法须要新图像坐落于每像素 (超过 8 位 -卡塔尔(英语:State of Qatar) -, 非索引像素格式。 此变通方法使用 Graphics.DrawImage()方法来将影像复制到新 位图 对象:
1.    布局从流、 从内部存款和储蓄器, 或从文件原始 位图 。
2.    创造新 位图 的同一大小, 带有是超越 8 位 - - 像素 (BPP卡塔尔(英语:State of Qatar)每像素格式。
3.    使用 Graphics.FromImage(卡塔尔 方法以得到有关二 位图 Graphics 对象。
4.    用于 Graphics.DrawImage() 绘制首 位图 到二 位图 。
5.    用于 Graphics.Dispose() 处置是 图形 。
6.    用于 Bitmap.Dispose() 是首 位图 处置。

//生成缩略图
stringsmallFileName=Server.MapPath("Images/SmallPictures/")+P_str_mFileName;//上传缩略图的路线
System.Drawing.ImagesmallImage=System.Drawing.Image.FromStream(fileUp.PostedFile.InputStream,true卡塔尔(قطر‎;//从文件中收取图片对象
doublewidth=Double.Parse(TextBox1.Text.ToString;//设定的莫斯中国科学技术大学学和增长幅度
doubleheight=Double.Parse(TextBox2.Text.ToString;
doubleNewWidth,NewHeight;//新的冲天和幅度
if(smallImage.Width>smallImage.Height)
{
NewWidth=width;
NewHeight=smallImage.Height*(NewWidth/smallImage.Width);
}
else
{
NewHeight=height;
NewWidth=smallImage.Width*(NewHeight/smallImage.Height);
}
if(NewHeight>height)
{
NewHeight=height;
}
if(NewWidth>width)
{
NewWidth=width;
}
Sizesize=newSizeNewWidth,NewHeight卡塔尔(قطر‎;//图片的大小
System.Drawing.ImageBitmap=newSystem.Drawing.Bitmap(size.Width,size.Height卡塔尔国;//新生成贰个bitmap对象
Graphicsgraphics=Graphics.FromImage;//新生成的画板
graphics.InterpolationMode=System.Drawing.Drawing2D.InterpolationMode.High;//设置最高的质量
graphics.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置高素质,低速度突显平滑程度
graphics.Clear(Color.White卡塔尔(英语:State of Qatar);//清空画布

始建索引印象
此消除办法在索引格式创制二个 Bitmap 对象:
1.    布局从流、 从内存, 或从文件原始 位图 。
2.    创制新 位图 具备同样的大小和像素格式作为首 位图 。
3.    使用 Bitmap.LockBits(卡塔尔 方法来锁定任何图像对于两 Bitmap 对象以其本机像素格式。
4.    使用 马尔斯hal.Copy 函数或别的内存复制函数来从首 位图 复制到二 位图 图像位。
5.    使用 Bitmap.UnlockBits(卡塔尔国 方法能够解锁两 Bitmap 对象。
6.    用于 Bitmap.Dispose() 是首 位图 处置。
由于西班牙人的思谋和我们不一样等,笔者再也用实例解释一下,作者这里运用的是创办非索引图像。
private void ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                //创立贰个bitmap类型的bmp变量来读取文件。
                Bitmap bmp = new Bitmap(openFileDialog1 .FileName );
                //新建第一个bitmap类型的bmp2变量,小编这里是依据本身的顺序必要设置的。
                Bitmap bmp2 = new Bitmap(1024, 768, PixelFormat.Format16bppRgb555);
                //将率先个bmp拷贝到bmp第22中学
                Graphics draw = Graphics.FromImage(bmp2);
                draw.DrawImage(bmp,0,0);
                pictureBox1.Image = (Image)bmp2 ;//读取bmp2到picturebox
                FILE = openFileDialog1.FileName;
                openFileDialog1.Dispose();
                draw.Dispose();
                bmp.Dispose(卡塔尔(英语:State of Qatar);//释放bmp文件能源
            }
        }
经过上述的读取文件,在保留的时候就不会冒出错误了。

//在钦赐地点画图

*********************************************************************************************

graphics.DrawImage(smallImage,newSystem.Drawing.Rectangle(0,0,Bitmap.Width,Bitmap.Height),

本身写的一个浮动缩略图程序, 生成gif,bmp,png 文件都足以, 就是不能够生成jpg 文件, 何解?? 

newSystem.Drawing.Rectangle(0,0,smallImage.Width,smallImage.Height),

//按比例缩短上传的图形 
System.Drawing.Image img; 
img = System.Drawing.Image.FromFile(all); 
float width = img.Width; 
float height = img.Height; 
float newwidth = 0; 
float newheight = 0; 
if (width > height) 

newwidth = 135; 
newheight = height / width * newwidth; 

else 

newheight = 135; 
newwidth = width / height * newheight; 

System.Drawing.Image outimg = img.GetThumbnailImage((int)newwidth,(int)newheight,null,IntPtr.Zero); 
string newfiles = path + newfilename + ".jpg"; 
outimg.Save(newfiles); 

System.Drawing.GraphicsUnit.Pixel);
//文字水印

outimg.Dispose(); 
img.Dispose();  

System.Drawing.GraphicstextGraphics=System.Drawing.Graphics.FromImage;


System.Drawing.Fontfont=newFont;

绘图坐标超越了画布大小。提出先把画布设大写,看看效果再分明实际尺寸

System.Drawing.Brushbrush=newSolidBrush(Color.Black);

跟画布大小应该是井水不犯河水的, 
假使上传jpg文件, 用以下办法保存是会报GDI 中发生平时性错误, 
outimg.Save(newfiles,System.Drawing.Imaging.ImageFormat.Jpeg); 
举例改成outimg.Save(newfiles,System.Drawing.Imaging.ImageFormat.Gif卡塔尔(قطر‎就能够称心如意转移, 
但改成outimg.Save(newfiles,System.Drawing.Imaging.ImageFormat.Gif卡塔尔(قطر‎ 后, 上传gif文件生成缩略图就报GDI 中生出经常性错误, 未来连标题标来源都不明白, 唉...

textGraphics.DrawString(TextBox3.Text.Trim(),font,brush,10,10);

监测一下您的newwidth和newheight是还是不是未料想的多寡

textGraphics.Dispose();

检查是不是是权限难题 

///图片水印

  1. 确认未有同名jpg文件存在 
  2. 承认aspnet大概network service有覆盖文件等一呼百应权限

//System.Drawing.ImagecopyImage=System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath("pic/1.gif"));

vivianfdlpw(卡塔尔国 一言惊吓醒来梦中人啊!! 果然是重名了!!!

//Graphicsa=Graphics.FromImage;

**************************************************************************************

//a.DrawImage(copyImage,newRectangle(Bitmap.Width-copyImage.Width,Bitmap.Height-copyImage.Height,copyImage.Width,copyImage.Height),

private void DrawImg(int width)
   {
   //图片的地点
    string path=String.Format(@"D:分享文件夹EnterpriseLicences1123.jpg");

0,0,copyImage.Width,copyImage.Height,GraphicsUnit.Pixel);

   //保存水印图片的公文夹
    string catchPath=Server.MapPath(@"..tempcache");

//保存缩略图

    Image newImage = Image.FromFile(path卡塔尔(英语:State of Qatar);    //抽取图片 
   
    if(width==0)
    {
     width=newImage.Width;
    }
    int hight=newImage.Height*width/newImage.Width;
    System.Drawing.Bitmap bitmap=new Bitmap(width,hight); 
    System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    g.Clear(System.Drawing.Color.Transparent);
    g.DrawImage(newImage,0,0,width,hight);

try
{

 

Bitmap.Save(smallFileName,System.Drawing.Imaging.ImageFormat.Gif);

   //水印图片
    Bitmap copyImage = (Bitmap)Bitmap.FromFile(Server.MapPath(@"..ImagesEnterpriseLisenceLogos.gif"));

}

    copyImage.MakeTransparent(Color.White);
   
    float copyW=width*4/10; float copyH=copyImage.Height*copyW/copyImage.Width;

catch(Exceptionex)
{

    g.DrawImage(copyImage,width-copyW-10,hight-copyH-5,copyW,copyH);
    try 
    {
     bitmap.Save(catchPath+"123.jpg"卡塔尔(قطر‎;  //这么些文件夹有权力

Response.Write("保存缩略图战败:"+ex.Message卡塔尔(英语:State of Qatar);

    }
    catch (Exception e)
    {
     throw e;
    }

}
stringimageUrl="";//定义一个用来囤积图片url的变量
Image1.ImageUrl=smallFileName.Substring(smallFileName.IndexOf;
imageUrl=smallFileName.Substring(smallFileName.IndexOf;
Image1.ImageUrl="~"+imageUrl.Replace;

    bitmap.Dispose();

graphics.Dispose();

    newImage.Dispose();
    g.Dispose();
   }

smallImage.Dispose();

 

Bitmap.Dispose();

Message "GDI+ 中发出日常性错误。"

//copyImage.Dispose();

Source "System.Drawing" 
StackTrace  

//a.Dispose();

at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)

//copyImage.Dispose();

at System.Drawing.Image.Save(String filename, ImageFormat format)

}
catch
{

   at System.Drawing.Image.Save(String filename)  

}
}
}

at KSI.KSI_Web.EnterpriseLisence.Drawing.DrawImg(Int32 width) in D:\worksharp\ksi\ksi_web\enterpriselisence\drawimg.aspx.cs:line 98"

非完全原创,原来的书文地址:


1.尽量利用 援用图片,幸免直接加载物理图片

eg://图片的地方
    string path=String.Format(@"D:分享文件夹EnterpriseLicences1123.jpg");

Image newImage = Image.FromFile(path卡塔尔(قطر‎;    //抽取图片

   g.DrawImage(newImage,0,0,width,hight);

这种格局不是很可取,何况便于变成 GDI+错误

2.VS03、05对GIF支持不是很完整!当你的程序奉行相当大操作的时候,且你会更新您的图纸的时候,GDI+错误 不时、也许平时出现。

本身自家不明领悟决格局。只可以使用别的方法,加载GIF图片 或许不加载GIF图片

注(您的代码比较严厉,不设有实质性的错误疏失,加载释放都有,即使职责倒霉,不过依然得以达到规定的标准释放的指标)请您 更改GIF 图片 再 重新生成项目

编辑:365bet亚洲官方投注 本文来源:什么定义一个共用画板跟画布,上传图片并生成

关键词:

  • 上一篇:没有了
  • 下一篇:没有了