我正在从特定路径拍摄图像并在其上应用颜色然后我想保存图像并在按钮点击时显示它.但是点击事件进入无限循环.
它不会导致循环一段时间,但如果你运行多个项目
时间和地点调试器然后你会发现它是循环的.
以下是我的代码:
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,200,100); image1.SetPixel(x,newColor); } else { Color pixelColor = image1.GetPixel(x,100,210); image1.SetPixel(x,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); } } } }
我帮我错了.
解决方法
尝试调用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,60); image1.SetPixel(x,newColor); } else if (y >= 150 && y < 300) { Color pixelColor = image1.GetPixel(x,100); image1.SetPixel(x,newColor); } else { Color pixelColor = image1.GetPixel(x,210); image1.SetPixel(x,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); } } }
项目树
这对我来说就像魅力一样.祝好运.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。