Asked by:
Rounded Bitmap Corners

Question
-
User1725247990 posted
Hi there
I'm trying to create rounded corners on images programmatically. Is there an easy way to do this using Graphics.DrawImage function? I've used the following code to cut out a rectangle withing the image but how can i create a rectangle with rounded corners to use instead? any ideas?
Dim mybitmap as Bitmap = Image.fromfile( Server.Mappath("myimage.jpg") )
Dim cropbitmap as Bitmap = new Bitmap(500, 360)
Dim mygraphic as Graphics = Graphics.FromImage(cropbitmap)
mygraphic.DrawImage(mybitmap, new Rectangle(5,5,490,350),new Rectangle(0,0,500,360),GraphicsUnit.Pixel)
response.contenttype="image/jpeg"
cropbitmap.save(response.outputstream, imageformat.jpeg)
mygraphic.dispose()
cropbitmap.dispose()
mybitmap.dispose()
Sunday, March 12, 2006 11:36 AM
All replies
-
User1725247990 posted
found the answer
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Drawing" %>
<script runat="server">
void Page_Init(Object sender,EventArgs e) {
string path = Server.MapPath("~/Images/flower.jpg");
int roundedDia = 50;
using(Image imgin = Image.FromFile(path)){
Bitmap bitmap = new Bitmap(imgin.Width, imgin.Height);
Graphics g = Graphics.FromImage(bitmap);
g.Clear(Color.White);
g.SmoothingMode =
(System.Drawing.Drawing2D.SmoothingMode.AntiAlias);
Brush brush = new System.Drawing.TextureBrush(imgin);
FillRoundedRectangle(g,
new Rectangle(0, 0, imgin.Width, imgin.Height),
roundedDia, brush);
// done with drawing dispose graphics object.
g.Dispose();
// Stream Image to client.
Response.Clear();
Response.ContentType = "image/pjpeg";
bitmap.Save(Response.OutputStream,
System.Drawing.Imaging.ImageFormat.Jpeg);
Response.End();
// dispose bitmap object.
bitmap.Dispose();
}
}
public static void FillRoundedRectangle(Graphics g,
Rectangle r,int d,Brush b){
System.Drawing.Drawing2D.GraphicsPath gp
= new System.Drawing.Drawing2D.GraphicsPath();
gp.AddArc(r.X, r.Y, d, d, 180, 90);
gp.AddArc(r.X + r.Width - d, r.Y, d, d, 270, 90);
gp.AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90);
gp.AddArc(r.X, r.Y + r.Height - d, d, d, 90, 90);
g.FillPath(b, gp);
}
</script>courtesy of http://www.jigar.net/howdoi/viewhtmlcontent98.aspx
Monday, March 13, 2006 5:01 AM -
User1980424205 posted
Hi
Does anybody know how to do this in VB? Ideally I'd like to run this on file upload and actually save the rounded image as a new file, rather than just generating it on-the-fly. But if anyone can translate this to VB, that'd be marvellous (code converters just don't work).
Thanks
Monday, June 19, 2006 12:49 PM -
User1980424205 posted
Not to worry, I worked it out:
Protected
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim path As String = Server.MapPath("flower.jpg") Dim roundedDia As Integer = 50g.Clear(System.Drawing.Color.White)
g.SmoothingMode = (System.Drawing.Drawing2D.SmoothingMode.AntiAlias)
Dim brush As Drawing.Brush = New System.Drawing.TextureBrush(imgin)FillRoundedRectangle(g,
New Drawing.Rectangle(0, 0, imgin.Width, imgin.Height), roundedDia, brush) ' done with drawing dispose graphics object.g.Dispose()
' Stream Image to client.Response.Clear()
Response.ContentType =
"image/pjpeg"bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)
bitmap.Save(Server.MapPath(
"flower3.jpg"))Response.End()
' dispose bitmap object.bitmap.Dispose()
End Using End Sub Public Shared Sub FillRoundedRectangle(ByVal g As Drawing.Graphics, ByVal r As Drawing.Rectangle, ByVal d As Integer, ByVal b As Drawing.Brush) Dim gp As System.Drawing.Drawing2D.GraphicsPath = New System.Drawing.Drawing2D.GraphicsPath()gp.AddArc(r.X, r.Y, d, d, 180, 90)
gp.AddArc(r.X + r.Width - d, r.Y, d, d, 270, 90)
gp.AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90)
gp.AddArc(r.X, r.Y + r.Height - d, d, d, 90, 90)
g.FillPath(b, gp)
End SubMonday, June 19, 2006 1:51 PM