小编Ed *_* S.的帖子

图像编辑工具的高级设计模式

我最近开始创建一个图像编辑工具,以满足非常具体的需求.对于那些打算使用它的人来说,这同样适合我自己的娱乐.然而,我在早期遇到了一些建筑障碍.

与任何图像编辑器一样,用户将使用"工具"来绘制和操纵图像.我的第一次尝试包括一个简单的界面:

public interface IDrawingTool
{
    void DrawEffect( Graphics g );
    // other stuff
}
Run Code Online (Sandbox Code Playgroud)

这(我认为)会很好,干净,便于维护和扩展.只需添加接口对象并在运行时调用所选接口对象的DrawEffect方法即可.

这种方法的问题在于不同的绘图工具不能干净地粘附到单个界面上.例如,钢笔工具只需知道要绘制的点即可工作.然而,矩形需要点击第一个点,以及当前位置.多边形工具需要跟踪多次鼠标点击.

我无法想出一个实现这个的好方法.我现在能想到的最好的方法是涉及每个工具的switch语句和case,这意味着绘图逻辑将在Canvas类中,而不是由Tool类型对象封装.因为这是练习,我想以正确的方式做到这一点.在此先感谢您的帮助.

oop interface-design design-patterns

6
推荐指数
1
解决办法
1960
查看次数

如何在没有焦点时可靠地找到前景窗口

所以,我认为这很简单,而且我错了.以下是该问题的简要说明:

我正在为我们的制造人员编写一个小应用程序,当他们单击系统托盘中的应用程序图标时,将抓取整个桌面和前台窗口的屏幕截图.目前,我在NotifyIcon的MouseMove事件中使用Win32方法"GetforegroundWindow"来保存前景窗口句柄并在Click事件中截取屏幕截图.

这有时会起作用,但是如果我很快点击图标,我实际上会捕获任务栏而不是前景窗口.我不知道为什么会发生这种情况(我明白任务栏是一个窗口,我不明白为什么有时它似乎在我点击之前在MouseMove中有焦点),而且我没有运气使用EnumWindows方法同样,可能是因为我不完全理解它是如何工作的.

看来,如果我能够仅使用窗口句柄获得每个窗口的z位置,那么使用EnumWindows解决这个问题就很容易了.然而,我还没有找到一种方法.

所以,我问你们; 你会如何写一个方法来可靠地定位前景窗口,因为它当时可能没有焦点?要么我的google-fu失败了,要么关于这方面的信息很少.提前致谢.

c# interop

6
推荐指数
1
解决办法
2303
查看次数


缩放到Canvas而不修改特定子控件的大小

所以我意识到我在这里冒险使用Canvas,并且很可能需要提出一个更加手动的解决方案.但是,在WPF中没有过多的经验,我希望可能有一些解决方案可以让我继续使用Canvas控件及其免费提供的功能.

问题围绕着Canvas,它用于放大和缩小图像以及属于Canvas的一些子控件.这些子控件应放置在图像上的不同位置,因此,Canvas工作得很好,因为它在我放大或缩小时处理我的所有布局/定位.

但是,一个缺点是Canvas在放大图像时缩放这些子控件,导致它们变得太大而无法在实践中使用.我正在寻找的是一种解决方案,它允许我放大到属于画布的图像,而不会缩小子控件的大小,最好是为我处理布局.

我已经尝试修改这些子控件的宽度和高度,因为缩放系数增加或减少,但有一个轻微的滞后时间,它看起来有点"生涩".

如果它归结为它我将简单地完成所有的缩放/平移/布局,但我想我会首先要确保我没有遗漏任何可以让我告诉Canvas不缩放尺寸的东西某些控件.提前致谢.

wpf zooming

5
推荐指数
1
解决办法
1747
查看次数

为什么我得到"不能分配一个常量0的数组"?

我正在为学校做一个扫雷程序,但我一直在我的代码上得到这个错误

无法分配常量大小为0的数组

我不知道为什么会这样; 我不分配大小-我设置上0的另一个问题是,我怎么能读我输入charchar,所以我可以将它保存在我的阵列?

如下所示,我正在使用输入和输出.我记录了我的输入和输出,所以你们可以看到我正在使用的程序.我想读取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)

c++ visual-c++

5
推荐指数
1
解决办法
1万
查看次数

通过API Gateway v Lambda Console调用lambda函数时请求正文序列化差异

我在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类型.

我知道这个模糊的内容涵盖了我所看到的内容,但它并不完全有用.

python amazon-web-services aws-lambda aws-api-gateway

5
推荐指数
1
解决办法
2750
查看次数

我*总是*必须在安全演员后检查是否为空?

快速提问; 执行安全演员后,我是否总是需要检查空值?我现在这样做,但在这种情况下:

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#

4
推荐指数
2
解决办法
742
查看次数

为什么我的图像看起来像Bgra而不是Argb?

所以,我对我刚刚跑过的快速测试非常困惑.我在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# image-processing lockbits

4
推荐指数
2
解决办法
2550
查看次数

如何使用DataContext.ExecuteQuery返回的未知类型的对象

因此,随着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背后的"魔法"数量,但我认为这可能是由于在幕后完成的属性映射.任何帮助深表感谢.

c# dynamic executequery linq-to-sql

4
推荐指数
1
解决办法
7967
查看次数

如何添加for循环控件

我尝试添加循环复选框,当我在文本框中输入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#

4
推荐指数
1
解决办法
89
查看次数