具体来说:我需要将图片框实际显示的特定区域捕获为位图。该区域的坐标由我覆盖在图片框顶部的控件的边界指定(但该控件属于图片框)。当我制作该区域的“快照”时,该控件被隐藏。
我尝试使用普通的屏幕捕获方法(CopyFromScreen),但您无法真正控制那里的时间。所以它正在捕捉“间隙”状态,就像我的图片框中照片之间的过渡。通常,它仅捕获纯黑色图像(图片框的背景颜色)。
所以我尝试将显示的图像(picturebox.image 属性)转换为位图。问题在于图片框很少能准确显示图像。它显示图像的某些部分,根据其大小模式(即缩放)进行缩放和裁剪。因此,我不能只获取控制坐标并将它们从整个图像中剪切出来。
因此,我尝试估计正在显示图像的哪一部分,并据此纠正我的矩形。事实证明,我基本上是重新创建图片框的“缩放”代码来执行此操作(使用图片框的纵横比、图像的纵横比、猜测图像当前发生的缩放级别(如果图像较大)或小于图片框等)。这并不漂亮。
所以:现在我需要一种仅捕获当前在图片框的客户区域中显示的位图的方法,包括照片和当前在其周围显示的任何黑色“信箱”。有人有吗?
请记住,我不能依赖使用 CopyFromScreen。对于我的目的而言,它不够可靠。我想我需要一种获取图片框的方法来告诉我它正在显示的位。
我似乎无法让IList.Union <>或IList.Concat <>做任何事情.
这是代码.为什么这会失败?
private void Form1_Load(object sender, EventArgs e)
{
DirectoryInfo C = new DirectoryInfo(@"c:\"); // 5 files here
IList<FileInfo> f = C.GetFiles();
int a = f.Count;
DirectoryInfo D = new DirectoryInfo(@"c:\newfolder"); // 2 files here
IList<FileInfo> g = D.GetFiles();
int b = g.Count;
f.Union(g);
int c = f.Count; // f remains at 5. Why are these not unioning?
f.Concat(g);
int d = f.Count; // f remains at 5. Why are these not concating?
}
Run Code Online (Sandbox Code Playgroud)
在任何这些情况下,"f"都不会改变.如何让Union或Concat发生?
给出以下通用方法:
/// <summary>
/// Performs a MoveNext on the IEnumerator 'Enoomerator'.
/// If it hits the end of the enumerable list, it resets to the beginning.
/// </summary>
/// <returns>If False, MoveNext has failed even after resetting,
/// which means there are no entries in the list.</returns>
private static bool CyclicalSafeMoveNext<T>(T Enoomerator)
where T : IEnumerator<T>
{
if (Enoomerator.MoveNext()) // successfully moved to the next element
{
return true;
}
else
{
// Either reached last element (so reset to …Run Code Online (Sandbox Code Playgroud) 我是否从根本上误解了 HasFlags 的工作原理?我不明白为什么这段代码失败了。
此代码采用一个值并确定它是否是我的枚举值的有效组合。
枚举值的两个子组通过对其他成员进行“或”运算来标识:JustTheMonths 和 Exclusives。JustTheMonths 在 Enum 中声明,Exclusives 在验证方法中构建。
当我将 1 或 2(未分配或未知)传递给此方法时,它会正确地将它们标识为有效 - 独占,但不是 JustTheMonths 的成员。
但是,当我将 4 传递给此代码时,它正确地将其识别为整个集合的成员,但错误地将其识别为子组 JustTheMonths 的成员。
我在这里做错了什么?为什么我的代码认为 4 是 (8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8172 | 16344) 的成员?
private void Form1_Load(object sender, EventArgs e)
{
FloweringMonth test = FloweringMonth.NotApplicable;
if (IsValidFloweringMonthValue((int)test))
{
System.Diagnostics.Debug.WriteLine("Valid");
}
else
{
System.Diagnostics.Debug.WriteLine("Not Valid");
}
}
[Flags]
public enum FloweringMonth
{
Unassigned = …Run Code Online (Sandbox Code Playgroud) c# ×4
bitflags ×1
bitmap ×1
enums ×1
generics ×1
image ×1
linq ×1
picturebox ×1
validation ×1
winforms ×1