Нажатие кнопки входит в бесконечный цикл (ASP.Net)
Я беру изображение с определенного пути и применяю к нему цвет, затем я хочу сохранить изображение и отобразить его снова при нажатии кнопки. но это событие щелчка идет в бесконечный цикл.
Это не вызывает цикл некоторое время, но если вы запустите проект более одного раза и разместите отладчик, то вы обнаружите, что он зацикливается.
Ниже мой код:
код aspx:
<%@ 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#:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using static System.Net.Mime.MediaTypeNames;
namespace ConvertImage
{
public partial class Convert : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click1(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);
NewImage.ImageUrl = @"~/Image/xyz.jpg";
Label1.Text = "Pixel format: " + image1.PixelFormat.ToString();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
}
}
Пожалуйста, помогите мне, где я не прав.
1 ответ
Попробуйте вызвать Debug.Writeline(image1.height) и image1.width. Также добавьте точки останова и выполните цикл. Трудно сказать, где петля становится бесконечной. Для меня все выглядит хорошо в цикле и не должно быть бесконечным.
Опубликуйте результат Debug.Writeline, чтобы мы могли помочь вам или узнать, где вы оказались в процессе отладки через точки останова или Debug.WRiteline.
Также попробуйте запустить его на другом изображении и / или подтвердить путь к изображению
Как я уже говорил, ваш код хорош, это либо проблема с путями, которая, по-видимому, связана не с тем, что вы получаете правильную ширину и высоту, или, скорее всего, с проблемой аутентификации. Я запустил ваш код, используя это изображение
и я смог получить это изображение в качестве вывода
подтвердите, если это правильный вывод.
Еще одна вещь, которую вы можете попробовать, это изменить
image1.Save(Server.MapPath(@"~\Image\xyz.jpg"), ImageFormat.Jpeg);
в
image1.Save(AppDomain.CurrentDomain.BaseDirectory + "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>
Default.aspx.cs
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);
}
}
}
Дерево проекта
Это работает как очарование для меня. Удачи.