我最近开始创建一个图像编辑工具,以满足非常具体的需求.对于那些打算使用它的人来说,这同样适合我自己的娱乐.然而,我在早期遇到了一些建筑障碍.
与任何图像编辑器一样,用户将使用"工具"来绘制和操纵图像.我的第一次尝试包括一个简单的界面:
public interface IDrawingTool
{
void DrawEffect( Graphics g );
// other stuff
}
Run Code Online (Sandbox Code Playgroud)
这(我认为)会很好,干净,便于维护和扩展.只需添加接口对象并在运行时调用所选接口对象的DrawEffect方法即可.
这种方法的问题在于不同的绘图工具不能干净地粘附到单个界面上.例如,钢笔工具只需知道要绘制的点即可工作.然而,矩形需要点击第一个点,以及当前位置.多边形工具需要跟踪多次鼠标点击.
我无法想出一个实现这个的好方法.我现在能想到的最好的方法是涉及每个工具的switch语句和case,这意味着绘图逻辑将在Canvas类中,而不是由Tool类型对象封装.因为这是练习,我想以正确的方式做到这一点.在此先感谢您的帮助.
所以,我认为这很简单,而且我错了.以下是该问题的简要说明:
我正在为我们的制造人员编写一个小应用程序,当他们单击系统托盘中的应用程序图标时,将抓取整个桌面和前台窗口的屏幕截图.目前,我在NotifyIcon的MouseMove事件中使用Win32方法"GetforegroundWindow"来保存前景窗口句柄并在Click事件中截取屏幕截图.
这有时会起作用,但是如果我很快点击图标,我实际上会捕获任务栏而不是前景窗口.我不知道为什么会发生这种情况(我明白任务栏是一个窗口,我不明白为什么有时它似乎在我点击之前在MouseMove中有焦点),而且我没有运气使用EnumWindows方法同样,可能是因为我不完全理解它是如何工作的.
看来,如果我能够仅使用窗口句柄获得每个窗口的z位置,那么使用EnumWindows解决这个问题就很容易了.然而,我还没有找到一种方法.
所以,我问你们; 你会如何写一个方法来可靠地定位前景窗口,因为它当时可能没有焦点?要么我的google-fu失败了,要么关于这方面的信息很少.提前致谢.
所以我意识到我在这里冒险使用Canvas,并且很可能需要提出一个更加手动的解决方案.但是,在WPF中没有过多的经验,我希望可能有一些解决方案可以让我继续使用Canvas控件及其免费提供的功能.
问题围绕着Canvas,它用于放大和缩小图像以及属于Canvas的一些子控件.这些子控件应放置在图像上的不同位置,因此,Canvas工作得很好,因为它在我放大或缩小时处理我的所有布局/定位.
但是,一个缺点是Canvas在放大图像时缩放这些子控件,导致它们变得太大而无法在实践中使用.我正在寻找的是一种解决方案,它允许我放大到属于画布的图像,而不会缩小子控件的大小,最好是为我处理布局.
我已经尝试修改这些子控件的宽度和高度,因为缩放系数增加或减少,但有一个轻微的滞后时间,它看起来有点"生涩".
如果它归结为它我将简单地完成所有的缩放/平移/布局,但我想我会首先要确保我没有遗漏任何可以让我告诉Canvas不缩放尺寸的东西某些控件.提前致谢.
我正在为学校做一个扫雷程序,但我一直在我的代码上得到这个错误
无法分配常量大小为0的数组
我不知道为什么会这样; 我不分配大小-我设置上0的另一个问题是,我怎么能读我输入char的char,所以我可以将它保存在我的阵列?
如下所示,我正在使用输入和输出.我记录了我的输入和输出,所以你们可以看到我正在使用的程序.我想读取char,char所以我可以保存数组上的所有地图.
我正在使用MSVC++ 2010.
freopen("input.txt","rt",stdin);
//4 4
//*...
//....
//.*..
//....
//3 5
//**...
//.....
//.*...
//0 0
freopen("output.txt","wt",stdout);
/*Field #1:
*100
2210
1*10
1110
Field #2:
**100
33200
1*100*/
int n=-1;
int m=-1;
int cont =0;
while(n!=0 && m!=0)
{
scanf("%d %d",&n,&m);
int VMatriz[n][m]={0};
int Mapa[n][m]={0};
if (n==0 && m==0)
break;
cont++;
printf("Field #%d",cont);
for (int i=0;i<n;i++)
{ printf("/n");
for (int j=0;j<m;j++)
{
scanf("%d ",&Mapa[i][j]);
if (Mapa[i][j]=='*')
{
if (j-1>=0) …Run Code Online (Sandbox Code Playgroud) 我在AWS API Gateway中设置了一个简单的API.它被设置为通过API网关代理集成调用Python 2.7 lambda函数.
我在本地和lambda测试控制台调用lambda工作(处理正文并更新数据库)时遇到了一个奇怪的错误,但没有通过curl或Postman.
事实证明,当通过lambda测试控制台调用时,该event['body']对象将作为a dict.当通过HTTP客户端调用时,它将作为字符串(Unicode)传递.
我当然可以解决它,但我想理解它,而且我也更喜欢一个合适的Python对象.我也希望能够使用lambda测试控制台,但目前我不能,因为它以不同的方式传递输入.
是否有一个配置开关我将丢失,它将强制API网关将请求体(以及所有其他参数)序列化为python dict或适当的对象?关于传递内容的具体细节的文档是稀疏的,说明:
event - AWS Lambda使用此参数将事件数据传递给处理程序.此参数通常是Python dict类型.它也可以是list,str,int,float或NoneType类型.
我知道这个模糊的内容涵盖了我所看到的内容,但它并不完全有用.
快速提问; 执行安全演员后,我是否总是需要检查空值?我现在这样做,但在这种情况下:
void button1_Click(object sender, EventArgs e)
{
Button = sender as Button;
if (button != null) // <-- necessary?
{
// do stuff with 'button'
}
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道我是不是在想什么.我每次出于习惯都会检查null,但是在这种情况下,我认为如果非Button对象连接到应该只用于按钮的处理程序,我宁愿崩溃.
编辑:好的,谢谢你们.如果有一个我失踪的角度,我只是好奇.
所以,我对我刚刚跑过的快速测试非常困惑.我在C#中进行一些图像处理.Get/SetPixel()已被证明太慢,所以我使用LockBits来获取原始数据.
但是,我似乎遇到了一个我无法弄清楚的情况.在扫描图像时,似乎每个像素按照顺序布置为Bgra,即蓝色字节,绿色字节,红色字节和alpha.我的印象是他们将以Argb的顺序排列.这是我正在使用的代码示例.
BitmapData baseData =
m_baseImage.LockBits(new Rectangle(new Point(0, 0), m_baseImage.Size),
ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
Bitmap test = new Bitmap(m_baseImage.Width, m_baseImage.Height);
byte* ptr = (byte*)baseData.Scan0;
for (int y = 0; y < m_baseImage.Height; ++y)
{
for (int x = 0; x < m_baseImage.Width; ++x)
{
// this works, image is copied correctly
Color c1 = Color.FromArgb(*(ptr + 3), *(ptr + 2), *(ptr + 1), *ptr);
// below does not work! Bytes are reversed.
//Color c1 = Color.FromArgb(*ptr, *(ptr + 1), *(ptr + 2), …Run Code Online (Sandbox Code Playgroud) 因此,随着C#4.0中动态关键字的出现,我希望我能找到一个更好的解决方案来处理DataContext.ExecuteQuery选择任意列时返回的类型的问题.
在过去,我创建了一个新类型来保存此类查询的结果,或者使用此SO帖子中描述的方法.因此,既然我能够处理在.NET 4.0下运行的新项目,我就会研究使用动态类型以一种不太痛苦的方式完成同样的事情.
所以,我给了这个镜头:
var result = _db.ExecuteQuery<dynamic>( "SELECT CustomerID,City FROM Customers", new object[0] );
foreach( var d in result )
{
MessageBox.Show( String.Format( "{0}, {1}", d.CustomerID, d.City ) );
}
Run Code Online (Sandbox Code Playgroud)
在运行时抛出异常,因为动态对象的属性CustomerID不存在.所以,由于我在这一点上对动态关键字的体验是零(文章/博客文章或两篇,没有真正的经验)我希望有人在这里可以告诉我,如果我想在这里做的甚至是可能的.我可能高估了ExecuteQuery背后的"魔法"数量,但我认为这可能是由于在幕后完成的属性映射.任何帮助深表感谢.
我尝试添加循环复选框,当我在文本框中输入3并单击按钮时,它会自动在表单中添加3个复选框我尝试此代码但只添加一个复选框
private void button1_Click(object sender, EventArgs e)
{
int x = Convert.ToInt32(textBox1.Text);
int m = 1;
for (int i = 0; i < x; i++)
{
CheckBox button2 = new System.Windows.Forms.CheckBox();
button2.Location = new System.Drawing.Point(5, m);
button2.Name = "button2 "+ m.ToString();
button2.Size = new System.Drawing.Size(51, 23);
button2.TabIndex = m;
//button2.UseVisualStyleBackColor = true;
this.Controls.Add(button2);
m++;
}
}
Run Code Online (Sandbox Code Playgroud) c# ×5
c++ ×2
aws-lambda ×1
dynamic ×1
executequery ×1
interop ×1
linq-to-sql ×1
lockbits ×1
oop ×1
python ×1
visual-c++ ×1
wpf ×1
zooming ×1