通过将此代码用于纯文本项目,我尝试并成功地做到了这一点:
var item = new MenuItemInfo
{
cbSize = (uint)Marshal.SizeOf(typeof(MenuItemInfo)),
cch = (uint)label.Length,
dwTypeData = label,
fMask = 0x2 | 0x10, // MIIM_ID | MIIM_TYPE
fState = 0x0, // MFS_ENABLED
fType = 0x0, // MFT_STRING
wID = id
};
InsertMenuItem(hMenu, 0, true, ref item);
Run Code Online (Sandbox Code Playgroud)
对于基于图标的项目,我更改fMask
并添加hbmpItem
如下:
var item = new MenuItemInfo
{
cbSize = (uint)Marshal.SizeOf(typeof(MenuItemInfo)),
cch = (uint)label.Length,
dwTypeData = label,
fMask = 0x80 | 0x2 | 0x100, // MIIM_BITMAP | MIIM_ID …
Run Code Online (Sandbox Code Playgroud) 首先,请注意,给出的答复这个问题将不会对所有的灰度影像,同时也注意到,在接受答案这个其他问题并不能解释所有如何确定是否图像灰度,但反正它不符合我的需求,因为它似乎只涵盖JPEG和TIFF图像,并假设它们将具有EXIF元数据及其中的必需字段.(我无法理解为什么人们确定我所链接的第一个问题是我所链接的第二个问题的"重复"......)
最后,最后接受的答案缺乏一个工作和演示的代码示例,但无论如何都无济于事,因为作者引用了使用Bitmap.GetPixel()
函数的缓慢和弃用的方法,但我们应该使用Bitmap.LockBits()
函数来获得更高的性能优势.
我有一些GIF,JPG,BMP和PNG图像,我需要确定它们是灰度图像还是不是灰度图像.对于GIF文件,我只关心分析第一帧.
我对图像的数据结构,像素颜色位和那些东西没有多少经验/意识,我只知道非常基础.所以,如果我错过了重要的信息,我应该提供我将要测试的图像的任何信息,那么请问我,但无论如何考虑到我想为"所有"类型的图像创建一个通用的解决方案,好吧,不是全部,但至少这些格式:BMP,JPG,GIF和PNG.
在我提到的那些图像格式中,我的最高优先级是GIF图像,这意味着如果能够确定GIF图像是否为灰度的方法不能用于分析其他类型图像的方法,那么我将接受仅涵盖GIF图像像素处理的答案.
我认为我的需求很明确:如何确定图像是否为灰度?
如果它根本不清楚,为了避免我可以做到你可以浪费你的时间:
该解决方案必须至少适用于GIF图像.(记住,我只关心GIF中的第一帧),但如果提供的解决方案对BMP,JPG和PNG也有效,那么它当然总是更好.
该解决方案必须关注PixelFormat.Format32bppRgb灰度图像.
解决方案一定不能使用Bitmap.GetPixel()
功能,必须使用它Bitmap.LockBits()
.
我不是要求解释,伪代码也没有关于图像结构/格式/像素等文档的外部链接,我要求一个有效的代码示例(当然,如果作者覆盖图像结构/像素技术,总是更好提供除代码之外的基本解释).
在C#或VB.NET中,选择无关紧要.
这就是我到目前为止所做的.我试图理解确定图像是否为灰度的点,我也不确定我的bytesPerPixel
变量条件是否合适以及我的RGB值分配是否正确,因为我从一开始就说过我不是图像处理专家所以我可能错过了重要的事情......
VB.NET
Public Shared Function IsImageGrayScale(ByVal img As Image) As Boolean
Select Case img.PixelFormat
Case PixelFormat.Format16bppGrayScale
Return True
Case Else
Dim pixelCount As Integer = (img.Width * img.Height)
Dim bytesPerPixel As Integer = (Image.GetPixelFormatSize(img.PixelFormat) \ 8)
If (bytesPerPixel <> 3) AndAlso (bytesPerPixel <> 4) Then
Throw …
Run Code Online (Sandbox Code Playgroud) 如果我想Form
在Form
标题中显示我项目中每个项目的大小,那么最佳方法是什么?
我不想在每个人手动放置一个事件处理程序Form
.
我希望这个过程是自动的.
类似于重载Load()
事件,在resize事件上添加处理程序.
我找到了这个答案,建议使用带有以下代码的“ core audio.dll” API:
private function getmute() as boolean
Dim devenum As New MMDeviceEnumerator
Dim device As MMDevice = devenum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia)
If device.AudioEndpointVolume.Mute = True Then
Return True
Else
Return False
End If
End Function
Run Code Online (Sandbox Code Playgroud)
我尝试了该代码,但无法正常工作,无法对其他问题发表评论。
当我尝试上述代码时,以下行将引发异常:
If device.AudioEndpointVolume.Mute = True Then
Run Code Online (Sandbox Code Playgroud)
这是异常消息:
AudioEndpointVolume不是设备的成员。
我已经输入了CoreAudioAPI
,还有什么可能是错的?
我在寻找一个VB.NET
或一个C#
解决方案。
我制作了一个名为 的表格form1.vb
。
我有 4 个名为supid
, supname
, supmobile
,的文本框suploc
。
我有一个名为 的 DataGridView datagridview1
。
我正在 DataGridView 中传输这 4 个文本框数据,但是当我尝试在 SQL 数据库中发送 DataGridView 行时,它仅发送 1 行。
当我单击插入按钮时,我希望在 SQL Server 中立即插入多行。
关于C语言的教程有很多,但是没有关于VB.Net
.
请帮助如何在VB.Net
.
我的代码:
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
If TextBox2.Text = "" Or TextBox3.Text = "" Or TextBox4.Text = "" Then
MessageBox.Show("PLEASE FILL ALL FIELDS")
Else
connection.Open()
Dim thequery As String = "select*from supplierdata where supmobile …
Run Code Online (Sandbox Code Playgroud) 如何检查数组中所有TextBox控件的Tag属性?
我想要这样的东西:
If textBox.Tag And textbox2.Tag And textbox21.Tag And
textbox22.Tag And textbox23.Tag And textbox24.Tag = "2" Then
Run Code Online (Sandbox Code Playgroud)
这是我的TextBoxes数组:
Dim allTextboxes() As TextBox = {textBox, narNaslov, narPersona, narDani, narPersona2,
kupIme, kupAdresa, kupKontakt, uvBroj, uvDatum, uvIznos,
uvAvans, uvRok, uvNacin, datumTbox}
Run Code Online (Sandbox Code Playgroud) 创建表单的实例后,我可以轻松列出表单中的所有控件。
是否有任何机制可以列出所有声明的变量或此类对象?
也许我应该称之为声明。仅顶层声明就足够了。
假设我们有带有MyForm
这样顶级声明的 Form:
Dim Town as String
Dim ZIP as String
Dim StreetName as String
Dim StreetNo as String
Public dtCountries as DataTable
Public LstCities as List(Of String)
...
Run Code Online (Sandbox Code Playgroud)
伪代码示例:
Dim MyForm as New MyForm ' create instance of the form
Dim dtVariables as New Datatable ' create a datatable to store found objects
dtVariables.Columns.Add("ID", GetTy(Int32))
dtVariables.Columns.Add("VariableName", GetTy(String))
dtVariables.Columns.Add("VariableType", GetTy(String))
For Each Varbl In MyForm.***variables*** ' <<< (how) to read all variables …
Run Code Online (Sandbox Code Playgroud) 我有一个小问题,找不到解决办法。
我想在一个ListBox
项目的末尾放一段文字,但我不知道如何...
TagLib.File f = TagLib.File.Create(paths[i]);
listBox1.Items.Add("0" + i + ". " + f.Tag.Title +"\n" + string.Join(", ", f.Tag.Performers) + " - " + "\r" + f.Tag.Album + " " + f.Properties.Duration.TotalMinutes.ToString());
Run Code Online (Sandbox Code Playgroud)
我已经试过了,但不幸的是它不能那样工作。也许有人知道如何将文本放在最后,并带有代码?
如何在图像上绘制形状以覆盖那里的内容并使其透明?
就像下图中间的透明孔。
编辑:
我一般Graphics.FromImage(image)
画图的时候用,即
Graphics.FromImage(image).DrawRectangle(...)
Run Code Online (Sandbox Code Playgroud)
但我想在图像中间做一个透明的孔或矩形。
我使用以下代码将窗口挂接到面板中:
SetParent(win, pnlApp.Handle);
SetWindowLong(win, GWL_STYLE, WS_VISIBLE);
MoveWindow(win, 0, 0, pnlApp.Width, pnlApp.Height, true);
Run Code Online (Sandbox Code Playgroud)
其中win
是窗口句柄,为IntPtr
. 这里考虑一下记事本,它可以很好地连接到面板中。
但是当我尝试使用以下代码释放(取消挂钩)它时:
SetParent(win, (IntPtr)0);
Run Code Online (Sandbox Code Playgroud)
显示时没有窗框!我的意思是它将再次释放到桌面中,但它没有任何窗口框架。
如何解决这个问题?
vb.net ×7
winforms ×7
c# ×5
.net ×4
winapi ×3
graphics ×2
datagridview ×1
events ×1
gdi+ ×1
grayscale ×1
listbox ×1
menuitem ×1
pinvoke ×1
reflection ×1
sql-server ×1