如何在web页面上绘制指定区域的图形?

anndy1999 2009-01-08 11:15:46
我用的如下方法,结果绘制来的图片大小为map.jpg图片源大小为1000*1000了.

Bitmap bmp = new Bitmap("C:\\map.jpg");
Rectangle rect = new Rectangle(0, 0, 200, 300);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(bmp, rect);
g.DrawLine(new Pen(new SolidBrush(Color.Red), 1), 0, 0, 90, 90);
bmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

map.jpg图片原始大小为1000*1000的,我只希望显示rect范围的图片就行,怎么做呢?
也就是最后在页面显示出来的图片为map.jpg的左上角的200*300的大小(相当于裁剪吧).
...全文
195 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
anndy1999 2009-01-09
  • 打赏
  • 举报
回复
首先感谢 mailofliujin 的方法。但估计不太适用于我的项目中。因为我的原图片非常图,几万像素吧。
我用如下的方法已经实现在裁剪。但是有点不足就是生成的新图片的原点位置没对。
---------------

Bitmap bigBmp=new Bitmap(Server.MapPath("map.jpg"));//map.jpg由于多张小图合成的一张大图,几万像素大小

Bitmap viewBmp = new Bitmap(viewWidth, viewHeight, PixelFormat.Format24bppRgb);
Rectangle viewRect = new Rectangle(0, 0, 500, 400);
Rectangle rect = new Rectangle(200, 100, 400, 300);
Graphics viewG = Graphics.FromImage(viewBmp);
viewG.Clear(Color.White);
viewG.SetClip(viewRect);
viewG.IntersectClip(rect);
viewG.DrawImageUnscaledAndClipped(bigBmp, viewRect);
viewBmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

最后生成的确实也是原图map.jpg中从200,100,400,300范围的截图,便问题在于,生成的这幅截图没有在浏览器的左上角。
不知我有没有表述清楚,请大家再帮我看看。谢谢
wuyq11 2009-01-09
  • 打赏
  • 举报
回复
Bitmap bmp = new Bitmap(100, 100);
Graphics g = Graphics.FromImage(bmp);
Font f = new Font("arial", 11f);
Brush b = Brushes.Blue;

string txt = "AAA!";
SizeF sz = g.MeasureString(txt, f);
g.Clear(Color.WhiteSmoke);
g.DrawString(txt, f, b, 50-sz.Width/2, 50-sz.Height/2);
g.Flush();
GifImage.GifAnimation gif = new GifImage.GifAnimation(bmp,
GifImage.GraphicControlExt.Default);
gif.Application = GifImage.ApplicationExt.Default;
gif.UseGlobalColorTableOnly = true;

for (int i = 1; i < 36; ++i)
{
g.Clear(Color.WhiteSmoke);
g.TranslateTransform(50,50);
g.RotateTransform(10f * i);
g.DrawString(txt, f, b, sz.Width/-2, sz.Height/-2);
g.ResetTransform();
g.DrawString("Hello", f, Brushes.Red, -50 + i * 4, 20);
g.DrawString("Yeah", f, Brushes.Orange, 60, -20+i*4);

g.Flush();
gif.AddFrame(bmp);
}

f.Dispose();
g.Dispose();
bmp.Dispose();

FileStream fs = new FileStream(@"E:\A.gif", FileMode.Create);
gif.Save(fs);
fs.Close;
mailofliujin 2009-01-08
  • 打赏
  • 举报
回复
突然发现这样做有点复杂。

不如直接用div + css控制。

<div style="width:200px; height:300px; overflow:hidden"><img src="map.jpg"/></div>
mailofliujin 2009-01-08
  • 打赏
  • 举报
回复
可以写一个HttpHandler.

//大概意思,细节地方可能有错误。
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string file = context.Request.QueryString["file"];
int width= int.Parse(context.Request.QueryString["width"]);
int height= int.Parse(context.Request.QueryString["height"]);
DrawImage(context, file, width, height);
}

public bool IsReusable
{
get
{
return true;
}
}


private void DrawImage(HttpContext context, string file, int width, int height)
{
System.Drawing.Image img;

img = new Bitmap(width, height);
Graphics g = Graphics.FromImage(img);

g.DrawImage(new Bitmap(file), new Rectangle(0, 0, width, height)
, 0, 0, bmp.Width, bmp.Height
, GraphicsUnit.Pixel);
g.Dispose();
}

img.Save(context.Response.OutputStream, ImgTypeFormat);
img.Dispose();


}
}


然后在aspx里面的imageURl=“ImageHandler.ashx?file=fileName&width=300&height=200”
wenjunqianli 2009-01-08
  • 打赏
  • 举报
回复
200*300的区域设为一个框架,在框架里面链的页里面去绘图就OK了.

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧