c# - 如何删除 OpenCvSharp、Cv2.ImShow()、c#、wpf 中的标题栏
问题描述
private void button_Click(object sender, RoutedEventArgs e)
{
VideoCapture video = new VideoCapture(0);
Mat frame = new Mat();
while (Cv2.WaitKey(33) != 'q')
{
video.Read(frame);
Cv2.ImShow(" ", frame);
}
Cv2.ImWrite("./Capture2.png", frame);
frame.Dispose();
video.Release();
Cv2.DestroyAllWindows();
}
- 当您按下按钮时,会出现一个类似图像的弹出窗口。
- 如何去除 Cv2.ImShow() 自动生成的弹出窗口的标题栏?
解决方案
由于版本 v4.5.1.20210210OpenCvSharp
提供了一个返回窗口句柄的方法。
您可以使用 Win32 API 删除标题栏并显示图像。
var windowName = "Image";
using (var source = Cv2.ImRead("<path_to_image>"))
{
Cv2.NamedWindow(windowName);
var handle = Cv2.GetWindowHandle(windowName);
WindowHelper.RemoveTitleBar(handle, windowName);
Cv2.ImShow(windowName, source);
Cv2.WaitKey();
Cv2.DestroyWindow(windowName);
}
WindowHelper
:
public static class WindowHelper
{
const int GWL_STYLE = -16;
const long WS_OVERLAPPEDWINDOW = 0x00CF0000;
const long WS_POPUP = 0x80000000;
public static void RemoveTitleBar(IntPtr hwnd, string windowName)
{
// change style of the child HighGui window
long style = GetWindowLong(hwnd, GWL_STYLE);
style &= ~WS_OVERLAPPEDWINDOW;
style |= WS_POPUP;
SetWindowLong(hwnd, GWL_STYLE, style);
// change style of the parent HighGui window
IntPtr hParent = FindWindow(null, windowName);
style = GetWindowLong(hParent, GWL_STYLE);
style &= ~WS_OVERLAPPEDWINDOW;
style |= WS_POPUP;
SetWindowLong(hParent, GWL_STYLE, style);
}
[DllImport("user32", EntryPoint = "GetWindowLongA")]
public static extern long GetWindowLong(IntPtr hwnd, int nIndex);
[DllImport("user32", EntryPoint = "SetWindowLongA")]
public static extern long SetWindowLong(IntPtr hwnd, int nIndex, long dwNewLong);
[DllImport("user32")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
}
推荐阅读
- python - Django 用户登录问题
- python-3.x - Python/Selenium - 如何处理从应用商店提取的数据
- postgresql - 使用 Postgres 进行稳定的分页
- vb.net - 后台线程减慢主 UI 线程 Visual Basic
- bash - VS Code Bash 对 Azure 的调用未经过身份验证
- arrays - 你如何在 C 中获取倒置复合字面量的地址?
- r - 绘制在错误中返回的分布 r
- snowflake-cloud-data-platform - query_id 在所有 Snowflake 帐户中是唯一的吗?
- html - 如何从正文 HTML 中提取文本
- java - Scanner.nextLine() 忽略空格?(爪哇)