C# 按钮单击进入无限循环(ASP.Net)
我正在从特定路径拍摄图像,并在其上应用颜色,然后我想保存图像并在单击按钮时显示它。但那个点击事件进入无限循环 它不会在一段时间内导致循环,但若您运行多个项目 时间和地点调试器,然后你会发现它是循环 下面是我的代码: aspx代码:C# 按钮单击进入无限循环(ASP.Net),c#,asp.net,infinite-loop,bitmapimage,C#,Asp.net,Infinite Loop,Bitmapimage,我正在从特定路径拍摄图像,并在其上应用颜色,然后我想保存图像并在单击按钮时显示它。但那个点击事件进入无限循环 它不会在一段时间内导致循环,但若您运行多个项目 时间和地点调试器,然后你会发现它是循环 下面是我的代码: aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Convert.aspx.cs" Inherits="ConvertImage.Convert" %> <!DOCTYPE
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Convert.aspx.cs" Inherits="ConvertImage.Convert" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click1" />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
<div>
<asp:Image ID="OldImage" ImageUrl="~/Image/Panda.jpg" runat="server" />
<asp:Image ID="NewImage" runat="server" />
</div>
</div>
</form>
</body>
</html>
c#代码:
使用系统;
使用System.Collections.Generic;
使用系统图;
使用系统、绘图、成像;
使用System.IO;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用静态System.Net.Mime.MediaTypeNames;
名称空间转换映像
{
公共部分类转换:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
}
受保护的无效按钮1\u单击1(对象发送者,事件参数e)
{
比较图像();
}
私有void CompareImage()
{
位图图像1;
尝试
{
image1=新位图(Server.MapPath(@“~\Image\Panda.jpg”),true;
OldImage.ImageUrl=“~/Image/Panda.jpg”;
int x,y;
对于(x=0;x=150&&y<300),则为else
{
Color pixelColor=image1.GetPixel(x,y);
Color newColor=Color.FromArgb(pixelColor.R,200100);
图像1.设置像素(x,y,新颜色);
}
其他的
{
Color pixelColor=image1.GetPixel(x,y);
Color newColor=Color.FromArgb(pixelColor.R,100210);
图像1.设置像素(x,y,新颜色);
}
}
}
image1.Save(Server.MapPath(@“~\Image\xyz.jpg”)、ImageFormat.Jpeg;
NewImage.ImageUrl=@“~/Image/xyz.jpg”;
Label1.Text=“像素格式:”+image1.PixelFormat.ToString();
}
捕获(例外情况除外)
{
响应。写入(例如消息);
}
}
}
}
请告诉我哪里错了。尝试调用Debug.Writeline(image1.height)和image1.width。还要添加断点并逐步完成循环。很难说这个循环将走向何方。对我来说,在循环中一切看起来都很好,它不应该是无限的 发回Debug.Writeline的结果,以便我们可以通过断点或Debug.Writeline帮助您完成调试过程,或者您在调试过程中得到了什么 还可以尝试在不同的映像上运行它和/或确认映像的路径 正如我所说,您的代码是好的,这要么是路径问题,似乎不是因为您获得了正确的宽度和高度,要么很可能是身份验证问题。我使用此图像运行了您的代码 我能够得到这个图像作为输出 确认这是否是正确的输出 你还可以尝试改变
image1.Save(Server.MapPath(@"~\Image\xyz.jpg"), ImageFormat.Jpeg);
到
我的最终代码
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
<div>
<asp:Image ID="OldImage" ImageUrl="~/Image/Panda.jpg" runat="server" />
<asp:Image ID="NewImage" runat="server" />
</div>
</div>
</form>
</body>
</html>
这对我来说很有魅力。祝你好运。我测试了这段代码,工作正常,你确定你的图像路径吗?@ShriramPanchal请重新运行,单击按钮后它将进入无限。将调试器放入代码中,您就会知道它是无限的。已经用调试器进行了测试,但没有发现任何结果,我还将System.Diagnostics.Debug.Print(“罚款”);在内部比较图像,输出没有问题,不是吗?按钮的点击事件没有循环?没有任何类型的无限循环,像charm一样工作,并获得与@Muhand Jumah相同的输出,我已经为您指出了pathImage hight是:625,hight是450。保存时没有问题,但在保存相同的按钮后,单击继续重复,这就是问题所在。好的,现在我们消除了循环出错的可能性。尝试注释所有这些行image1.Save(Server.MapPath(@“~\Image\xyz.jpg”)、ImageFormat.Jpeg);NewImage.ImageUrl=@“~/Image/xyz.jpg”;Label1.Text=“像素格式:”+image1.PixelFormat.ToString();在对它们进行注释之后,运行它,看看您是否会进入无限循环。我已经尝试了所有这些,然后我知道这一行导致了问题:image1.Save(Server.MapPath(@“~\Image\xyz.jpg”)、ImageFormat.Jpeg;我的下一个想法是某种身份验证错误。能否尝试在自己的变量中设置Server.MapPath(@“~\Image\xyz.jpg”)?然后在image1.save中,通过这种方式调用变量名,我们可以知道Image.save还是Server.MapPath给了我们一个无限循环。您运行了代码吗?这是没有错误的。。。
image1.Save(AppDomain.CurrentDomain.BaseDirectory + "Image/xyz.jpg", ImageFormat.Jpeg);
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
<div>
<asp:Image ID="OldImage" ImageUrl="~/Image/Panda.jpg" runat="server" />
<asp:Image ID="NewImage" runat="server" />
</div>
</div>
</form>
</body>
</html>
using System;
using System.Drawing;
using System.Drawing.Imaging;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
CompareImage();
}
private void CompareImage()
{
Bitmap image1;
try
{
image1 = new Bitmap(Server.MapPath(@"~\Image\Panda.jpg"), true);
OldImage.ImageUrl = "~/Image/Panda.jpg";
int x, y;
for (x = 0; x < image1.Width; x++)
{
for (y = 0; y < image1.Height; y++)
{
if (y < 150)
{
Color pixelColor = image1.GetPixel(x, y);
Color newColor = Color.FromArgb(pixelColor.R, 25, 60);
image1.SetPixel(x, y, newColor);
}
else if (y >= 150 && y < 300)
{
Color pixelColor = image1.GetPixel(x, y);
Color newColor = Color.FromArgb(pixelColor.R, 200, 100);
image1.SetPixel(x, y, newColor);
}
else
{
Color pixelColor = image1.GetPixel(x, y);
Color newColor = Color.FromArgb(pixelColor.R, 100, 210);
image1.SetPixel(x, y, newColor);
}
}
}
//image1.Save(Server.MapPath(@"~\Image\xyz.jpg"), ImageFormat.Jpeg);
image1.Save(AppDomain.CurrentDomain.BaseDirectory + "Image/xyz.jpg", ImageFormat.Jpeg);
NewImage.ImageUrl = @"~/Image/xyz.jpg";
Label1.Text = "Pixel format: " + image1.PixelFormat.ToString();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
}