http://blog.naver.com/coolds7?Redirect=Log&logNo=20025910158

 

윈도우 기본폼모양인 사각형이아닌 여러가지 모양의 폼을 만들어야 할때가 있다

밑에소스는 간단하게 사진이나 여러가지 비트맵 파일 모양대로 폼을 바꿔주는소스

입니다

그냥 테스트 용이라 에러처리는 거의 않들어가 있구요 사용하시는 분이 에러처리정도는

넣어서 쓰셔야 할거에요 소스로 들어있는 사진은 포토샵이 않되는 관계상 그냥 대충

페인트로 짤라 넣은거니까 이해주세요 ^^;;

참고로 밑에 소스를 쓰실꺼면 원하는 모양의 비트맵파일을 만들고 그거보다 최소 2Pixel 크게

여백을 같은 색으로 주셔야 됩니가 그러니 간단하게 말하면 원하는 사진을 새로운 그림판이나

어디서든 그 파일보다 조금큰 공간에다 붙여 넣으시면 되겠습니다

소스보시면 이해가실꺼에요

밑에는 주요소스

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

namespace KoreaDotNetGuy
{
/// <summary>
/// Summary description for ImageToRegion.
/// </summary>
public class BitmapToRegion
{
public static Region Convert(string imgPath)
{
Bitmap baseBitmap;
GraphicsUnit gUnit;
RectangleF rectF;
Color key;
int xMax;
int yMax;
GraphicsPath graphicsPath;

try
{
baseBitmap = new Bitmap(imgPath);
gUnit = GraphicsUnit.Pixel;
graphicsPath= new GraphicsPath();
}
catch
{
throw new ArgumentException("Bitmap","This is not bitmap or incorrect path");
}

key = baseBitmap.GetPixel(1,1);
rectF = baseBitmap.GetBounds(ref gUnit);
xMax = (int)rectF.Width;
yMax = (int)rectF.Height;

for(int y=0; y<yMax; y++)
{
int xStart = 0;
int xEnd = 0;
for(int x=0; x<xMax; x++)
{
if(baseBitmap.GetPixel(x,y) == key)
continue;
xStart = x;
break;
}
for(int x=xMax -1; x>0; x--)
{
if(baseBitmap.GetPixel(x,y) == key)
continue;
xEnd = x;
break;
}
graphicsPath.AddRectangle(new Rectangle(xStart, y, xEnd - xStart + 1, 1));
}

Region region = new Region(graphicsPath);
graphicsPath.Dispose();

return region;
}
}
}

[출처] C# 폼 모양 바꾸기|작성자 coolds7

Posted by 퓨전마법사
,