Desktop ausgewählten Bereich mit leicht transparenter Farbe übersehen?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Desktop ausgewählten Bereich mit leicht transparenter Farbe übersehen?

    Hi Leute,
    ich hab ein kleines Problem und hab schon paar Dinge probiert, wie z.B. den Hintergrund mit den Farben zu übersehen.

    Worum geht's?
    Das Programm sollte einen bestimmten Bereich auswählen und der Benutzer sollte dann diesen Bereich abscreenen können.
    Es funktioniert zwar, jedoch erkennt man den ausgewählten Bereich sehr schlecht, da es mit keinem Hintergrund o.ä. hinterlegt ist.

    Mein Code (langer Code folgt):

    C#-Quellcode

    1. public partial class Area : Form
    2. {
    3. float area_X,
    4. area_Y,
    5. area_Height,
    6. area_Width;
    7. private static PropertyManager pManager = new PropertyManager();
    8. private static Engine Engine = new Engine();
    9. private Pen area_Pen;
    10. bool started = false;
    11. private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    12. {
    13. if (pictureBox1.Image == null)
    14. return;
    15. if (started)
    16. {
    17. pictureBox1.Refresh();
    18. area_Height = e.Y - area_Y;
    19. area_Width = e.X - area_X;
    20. pictureBox1.CreateGraphics().DrawRectangle(area_Pen, area_X, area_Y, area_Width, area_Height);
    21. }
    22. }
    23. private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    24. {
    25. if(!started)
    26. {
    27. if(e.Button == MouseButtons.Left)
    28. {
    29. area_X = e.X;
    30. area_Y = e.Y;
    31. area_Pen = new Pen(Color.DarkGray, 1);
    32. area_Pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
    33. }
    34. pictureBox1.Refresh();
    35. started = true;
    36. }
    37. }
    38. private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    39. {
    40. if (started)
    41. {
    42. if (pictureBox1.Image == null)
    43. return;
    44. if (e.Button == MouseButtons.Left)
    45. {
    46. pictureBox1.Refresh();
    47. area_Height = e.Y - area_Y;
    48. area_Width = e.X - area_X;
    49. pictureBox1.CreateGraphics().DrawRectangle(area_Pen, area_X, area_Y, area_Width, area_Height);
    50. }
    51. started = false;
    52. if (area_Height > 5 && area_Width > 5)
    53. {
    54. Rectangle selectedArea = new Rectangle((int)area_X, (int)area_Y, (int)area_Width, (int)area_Height);
    55. Bitmap fullImage = new Bitmap(pictureBox1.Image, pictureBox1.Width, pictureBox1.Height);
    56. Bitmap areaImage = new Bitmap((int)area_Width, (int)area_Height);
    57. Graphics graphic = Graphics.FromImage(areaImage);
    58. graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    59. graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
    60. graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    61. graphic.DrawImage(fullImage, 0, 0, selectedArea, GraphicsUnit.Pixel);
    62. areaImage.Save(pManager.pKey_screenshotFolderPath + '/' + Engine.createRandomString() + ".png", ImageFormat.Png);
    63. this.Close();
    64. }
    65. else
    66. {
    67. pictureBox1.Refresh(); // Destroys the pictureBox1.CreateGraphics().DrawRectangle()-Rectangle, if < 5x5
    68. }
    69. }
    70. }
    71. private void pictureBox1_Click(object sender, EventArgs e)
    72. {
    73. }
    74. private void Area_KeyDown(object sender, KeyEventArgs e)
    75. {
    76. if (e.KeyCode == Keys.Escape)
    77. {
    78. this.Close();
    79. }
    80. }
    81. public Area()
    82. {
    83. InitializeComponent();
    84. }
    85. private void Area_Load(object sender, EventArgs e)
    86. {
    87. // Dualscreen+ fix
    88. this.Height = SystemInformation.VirtualScreen.Height;
    89. this.Width = SystemInformation.VirtualScreen.Width;
    90. this.Top = SystemInformation.VirtualScreen.Top;
    91. this.Left = SystemInformation.VirtualScreen.Left;
    92. this.Hide(); // ez fix ez lyf ez skins
    93. CaptureAreaScreen();
    94. pictureBox1.BackColor = Color.Red;
    95. }
    96. public void CaptureAreaScreen()
    97. {
    98. Image tmpScreen;
    99. this.Hide();
    100. using (Bitmap CaptureScreen = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height))
    101. {
    102. using (Graphics gArea = Graphics.FromImage(CaptureScreen))
    103. {
    104. gArea.CopyFromScreen(SystemInformation.VirtualScreen.Left, SystemInformation.VirtualScreen.Top, 0, 0, CaptureScreen.Size);
    105. using (MemoryStream mStream = new MemoryStream())
    106. {
    107. CaptureScreen.Save(mStream, ImageFormat.Png);
    108. tmpScreen = Image.FromStream(mStream);
    109. pictureBox1.Image = tmpScreen;
    110. this.Show();
    111. Cursor = Cursors.Cross;
    112. }
    113. }
    114. }
    115. }

    Hab schon probiert, einfach den Background vom Picturebox leicht transparent mit rgba-Code zu ändern, leider kein Erfolg.
    Mit freundlichen Grüßen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „meikel__“ ()

    Wenn Du den Bereich mit der Maus ziehst, kannst Du eien leere Form mit ca. 80% Transparenz und FormBorderStyle None drüberlegen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!