PictureBox
의 위치가 Transparent
인지 확인하려면 Image
및 SizeMode
속성이 PictureBox
인 지 확인하십시오.
GetPixel
은 에 따라 이미지 위치와 크기가 다르기 때문에 Bitmap
을 사용할 수 없습니다.
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (HitTest(pictureBox1,e.X, e.Y))
pictureBox1.Cursor = Cursors.Hand;
else
pictureBox1.Cursor = Cursors.Default;
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
if (HitTest(pictureBox1, e.X, e.Y))
MessageBox.Show("Clicked on Image");
}
: 마우스가 PictureBox
의 불투명 한 지역에 걸쳐있는 경우
public bool HitTest(PictureBox control, int x, int y)
{
var result = false;
if (control.Image == null)
return result;
var method = typeof(PictureBox).GetMethod("ImageRectangleFromSizeMode",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var r = (Rectangle)method.Invoke(control, new object[] { control.SizeMode });
using (var bm = new Bitmap(r.Width, r.Height))
{
using (var g = Graphics.FromImage(bm))
g.DrawImage(control.Image, 0, 0, r.Width, r.Height);
if (r.Contains(x, y) && bm.GetPixel(x - r.X, y - r.Y).A != 0)
result = true;
}
return result;
}
그런 다음 당신은 단순히 확인하는 HitTest
방법을 사용할 수 있습니다 : 먼저 SizeMode
에 따라 크기와 Image
의 위치를 감지한다 또한 BackColor
에서 Color.Transparent
으로 설정하면 부모에 비해 PictureBox
만 투명하게됩니다. 예를 들어 Form
에 투명 배경색을 설정하면 2 PictureBox
인 경우 양식의 배경을 보게됩니다. 투명한 배경을 지원하는 PictureBox
을 만들려면 컨트롤 뒤에있는 것을 그려야합니다. 이 게시물에서 TransparentPictureBox
을 찾을 수 있습니다 : How to make two transparent layer with c#?
아, 주석에서'SizeMode' 참조가 의미하는 바입니다. 코드를 보내 주셔서 감사합니다! –
@AniruddhaVarma 예. 위 코드를 사용하면 포인트가 투명한지 확인할 수 있습니다. 'StretchImage','Zoom','CenterImage','Normal'과 같은 다른'SizeMode' 값을 사용하여 정상적으로 작동합니다. –
또한'BackColor'를'Color.Transparent'로 설정하면 오직'PictureBox'가 그것의 부모를 기준으로 투명하게됩니다. 예를 들어'Form'에 2 개의'PictureBox'가있는 경우 투명 배경색을 설정하면 양식 배경을 보게됩니다. 투명한 배경을 지원하는'PictureBox'를 만들려면 컨트롤 뒤에있는 것을 그려야합니다. 이 게시물에서 'TransparentPictureBox'를 찾을 수 있습니다 : [C#으로 두 개의 투명 레이어를 만드는 법] (http://stackoverflow.com/a/36102074/3110834) –