[英]Why the cropped rectangle is not fitting the pictureBox sizemode?
在我的程序中,我在listBox上執行了該操作,當我選擇一個項目時,我在右側的圖片框中看到一個屏幕截圖圖像。 然后,我可以在pictureBox上繪制一個矩形,然后單擊按鈕可以裁剪該矩形。 問題是,當我選擇一個項目時,如果我沒有看到pictureBox中的屏幕截圖太大,我需要使form1設計器的SizeMode屬性中的pictureBox成為縮放或拉伸圖像。 只有縮放或拉伸,我才能看到它很好。 但是然后當我裁剪矩形時,它不合適了,我需要pictureBox sizemode為Normal。 我該如何解決?
這是我的form1代碼:
這就是我選擇和顯示項目的方式:
private void listBoxSnap_SelectedIndexChanged(object sender, EventArgs e)
{
WindowSnap snap = this.listBoxSnap.SelectedItem as WindowSnap;
selectedIndex = this.listBoxSnap.SelectedIndex.ToString();
this.pictureBoxSnap.Image = snap.Image;
for (int i = 0; i < rectangles.Length; i++)
{
if (rectangles[i] != RectClone)
{
ClearGraphics = false;
}
else
{
ClearGraphics = true;
}
}
}
這是繪畫事件:
private void pictureBoxSnap_Paint(object sender, PaintEventArgs e)
{
if (pictureBoxSnap.Image != null)
{
{
if (ClearGraphics == false)
{
if (rectangles[listBoxSnap.SelectedIndex] != Rectangle.Empty)
{
e.Graphics.DrawRectangle(Pens.Firebrick, rectangles[listBoxSnap.SelectedIndex]);
}
}
if (cropRect == true)
{
if (recttest.Width > 10 && recttest.Height > 10)
{
e.Graphics.Clear(Color.White);
e.Graphics.DrawImage(pictureBoxSnap.Image, new Rectangle(rect.X, rect.Y, rect.Width, rect.Height), rect, GraphicsUnit.Pixel);
}
}
}
}
}
drawimage線繪制裁剪的矩形。
問題是,如果將SizeMode設置為Normal,我會看到裁剪好的矩形,但是當我選擇一個項目時,屏幕快照/圖像適合pictureBox太大。 如果我將sizemode更改為zoom,我會看到所選項目的圖像很好,但是裁剪后的圖像不合適。
編輯:
當將其設置為“正常”時,我會在矩形中看到裁剪好的圖像,但是所選項目的屏幕截圖看起來像是在pictureBox中放大/放大。 如果將其設置為縮放,則我會看到一個項目的圖像很好,但是我繪制的矩形卻不是在我用矩形標記的區域內看到的裁剪圖像,而更像是圖像0,0區域部分。
這是我拍攝的4張圖像的鏈接,並分別解釋了pictureBox的SizeMode和問題所在。 我無法在此處上傳圖片,所以我在Facebook上做了相冊
....
....
if (cropRect == true){
if (recttest.Width > 10 && recttest.Height > 10){
e.Graphics.FillRectangle(Brushes.White, 0, 0, pictureBoxSnap.Width, rect.Y);
e.Graphics.FillRectangle(Brushes.White, 0, rect.Y, rect.X, rect.Height);
e.Graphics.FillRectangle(Brushes.White, rect.X + rect.Width, rect.Y, pictureBoxSnap.Width - rect.X - rect.Width, rect.Height);
e.Graphics.FillRectangle(Brushes.White, 0, rect.Y + rect.Height, pictureBoxSnap.Width, pictureBoxSnap.Height - rect.Y - rect.Height);
}
}
或更好
private void pictureBoxSnap_Paint(object sender, PaintEventArgs e){
Point pnt;
....
....
if (cropRect == true){
if (recttest.Width > 10 && recttest.Height > 10){
pnt = PointToScreen(pictureBoxSnap.Location);
e.Graphics.Clear(Color.White);
e.Graphics.CopyFromScreen(pnt.X + rect.X, pnt.Y + rect.Y, rect.X, rect.Y, New Size(rect.Width, rect.Height));
}
}
瓦爾特
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.