标签: paint

改变摇摆窗口的底层背景颜色

正如这里所讨论的,当在Vista中调整Swing应用程序的大小(和Windows 7,这就是我正在使用的)时,右下角会出现黑色背景,而Swing的重绘会赶上更改.

使用其他应用程序(Windows资源管理器(本机),Firefox(C++?)和Eclipse(Java))我注意到它们都有同样的问题 - 与上面链接中的人说的相反 - 但它们通过以下方式将问题最小化具有灰色填充颜色,与Swing中出现的黑色相比,其视觉震撼性要小得多.

我想知道是否有一些方法可以改变这一点,以便Swing的行为与其他应用程序一样?我尝试设置JFrame的背景颜色,但无济于事.

其他信息 乔纳斯发现(见下面的信息性答案)这是JFrames的一个问题,但不是AWT框架 - 也许这会帮助有人解决这个问题.

java windows swing paint jframe

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

模拟绘画应用的画笔笔触

我正在尝试编写一个应用程序,可以使用模拟画笔笔划创建看起来像绘画的图片.模拟笔触的简单方法有什么好的来源吗?例如,给定用户拖动鼠标的鼠标位置列表,画笔宽度和画笔纹理,如何确定要绘制到画布的内容?

我尝试在鼠标移动的方向上调整画笔纹理,并沿着路径轻拍几个画笔纹理图像,但它看起来不太好.我想我错过了刷子纹理应该缩小并在角落上生长的东西.

任何简单的链接将不胜感激.我发现了关于模拟例如油画的复杂学术论文,但我只想要一个基本的算法,如果可能的话会产生好的结果.

c opengl graphics paint

13
推荐指数
2
解决办法
7610
查看次数

将Autodesk Animator Pro移植到跨平台

我以前的相关问题是逆向工程旧油漆程序

我在这里建立了我的运营基地:http://animatorpro.org wiki即将推出.

好的,现在我有300,000行传统的MSDOS代码库.这有点"小心你想要的"情况.我不是一位经验丰富的C程序员.我也不是完全缺乏经验,但出于所有意图和目的,我对语言是一个菜鸟,特别是它的图书馆的复杂性.我特别不了解专门为MSDOS编写的C程序与跨平台程序之间差异的变幻莫测.但是我已经研究了这个代码库超过一年了,这就是我对Animator Pro的了解:

使用的编译器和工具:

  • Watcom C编译器
  • tcmake(来自Turbo C的程序)
  • 386asm,Phar Lap dos扩展器的专用汇编程序
  • 当然还有Phar Lap dos扩展器本身.
  • 一系列晦涩的dos实用程序

大部分编译似乎都是由批处理文件驱动的.虽然我已经获得了所有这些工具的副本,但我还没有成功编译它.(虽然我编译了它的哥哥,autodesk animator original.

它有一个插件系统,可以在DLL可用之前复制DLL,基于REX.插件系统处理:

  • 视频驱动程序(包含大量VESA驱动程序)
  • 输入驱动程序(包括wacom数位板和键盘)
  • 绘图工具
  • 墨水(如photoshop的滤镜或混合模式)
  • 脚本插件(本质上是编译脚本)
  • 文件格式

它有自己的脚本解释器,名为POCO,基于C语言 - 脚本语言有足够的能力来完成插件系统可以做的几乎所有事情 - 只是更慢.

鉴于此信息,这是我的发展计划.请批评这个.源代码可在上面的链接中找到,因此如果您愿意,可以轻松地自己评估情况.

  1. 使用其原始工具进行编译.
  2. 切换到使用DJGPP,并进行必要的更改以使其与原始汇编程序一起编译.
  3. 包括Allegro.cc"游戏"库,并尽可能多地切换到该库的功能 - 也许只需编写使用Allegro API的新视频和输入驱动程序.我正在考虑快速而不是SDL,因为:有一个DOS版本的Allegro,而且令人着迷的是,其核心功能之一是能够播放Animator Pro的原生格式FLIC.
  4. 希望在3之后,我将淘汰项目中的大部分或全部汇编程序.我有希望地说,因为它是一种模糊的方言,没有任何现代的免费汇编程序,无需进行重大修改.我试过了所有这些.如果我可以定义汇编程序的实际函数,那么剩下的东西将转换为在NASM中汇编,或转换为C代码.
  5. 将dos扩展器从Phar Lap切换到HX Dos http://www.japheth.de/HX.html,它承诺尽可能多地复制WIN32 api.然后进行所有必要的代码更改以使其工作.
  6. 切换到Allegro.cc的win32版本,假设win32版本可以在HXDos之上运行.进行进一步必要的更改
  7. 修改插件系统以使用某种标准的跨平台插件库.这会是什么,我不知道.也许你可以提供一些建议?我与最初编写插件系统的开发人员进行了交谈,他说由于分段限制,它在现代操作系统上所做的一些事情是不可能的.我不确定这意味着什么,但我猜这意味着所有的插件都需要从头开始重写.
  8. 奇怪的是,我完成了以上所有工作,我们可以尝试在windows,osx和linux中运行它,同时处理其他跨平台的琐事,比如长文件名,以及我没有想到的东西.

任何人都有问题吗?allegro是个不错的选择吗?如果没有,为什么?你会对这个插件系统做些什么?你会做什么不同的?这整件事是愚蠢的吗?我应该从头开始重写它,使用原始的灵感吗?(显然需要原始开发人员"大约一个月"才能做到这一点)

我上面没有提到的一件事是文本/字体系统.不知道该怎么办,但Animator Pro有自己的自定义字体格式,但也可以使用Postscript Type 1字体和其他一些格式.

c dos paint allegro

13
推荐指数
3
解决办法
4040
查看次数

添加CornerPathEffect时FillType.EVEN_ODD的不同行为?

我在Drawable这里试验,发现了一些我无法解释的东西,希望有人可以帮助我.

为什么加入CornerPathEffectPaint似乎"破"(?)的EVEN_ODD FillType

更具体地说,我正在按原样测试这个HexagonDrawable类.这就是我得到的:

硬角,概述,预期的行为.

但是,如果我设置CornerPathEffectPaint,如下所示(构造函数)...

public HexagonDrawable(int color) {
    paint.setColor(color);
    paint.setPathEffect(new CornerPathEffect(6)); // added
    hexagon.setFillType(Path.FillType.EVEN_ODD);
}
Run Code Online (Sandbox Code Playgroud)

......这就是我得到的:

圆角,轮廓效果消失,意外行为?

圆角,是的,但没有轮廓的外观(奇数/偶数/奇数).有人可以解释一下原因吗?

android path paint shape drawable

13
推荐指数
1
解决办法
1035
查看次数

如何使用Python和pygame创建MS Paint克隆

在我看来,有两种方法可以处理鼠标事件来绘制图片.

第一种是当检测到鼠标移动和画一条线,其中鼠标,示出在这里.然而,这个问题是,在刷子尺寸较大的情况下,每条"直线"之间会出现很多间隙,因为它使用线条的笔划大小来创建粗线.

另一种方法是,当鼠标移动如图所示,以画圈圈这里.问题是如果鼠标移动得比计算机检测到鼠标输入快,则每个圆之间会出现间隙.

这是我的两个问题的屏幕截图:

http://imgur.com/32DXN.jpg

实现像MS Paint一样的刷子的最佳方法是什么,刷子尺寸相当大,线条中没有间隙或每个圆圈之间没有间隙?

python mouse pygame paint draw

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

逆向工程旧油漆程序

我有几个非常老的基于MSDos的绘画程序.它们适用于调色板索引图像缓冲区.它们具有许多壮观的形状绘制工具,画笔和效果,在任何现代绘画程序中都不存在 - 特别是在保持在低调色板索引图像的"边界"内时.我想在现代程序中重现许多这些奇妙的工具,或许让我们再次更容易访问自己和普通大众,而无需启动像dosbox这样的模拟器.但我有一个问题.

虽然很多这些画笔和工具都有明显的功能,但其实现应该相当简单.但是使用其他工具,他们的操作原则并不那么明显.我将无法确定一个正确或忠实的算法来实现这些.

如果你是我,你会采取什么方法?是否有现成的反编译器/反汇编器可以处理这样的旧程序?或者你会采取一些不同的方法,例如有条不紊地测试不同输入的算法,以推断潜在的功能?不同技术的某种组合?对于这些程序的一行,这些(商业)程序的原作者是已知的,现在是狂热的开源倡导者.我应该尝试直接与他们联系并询问吗?我对逆向工程并不是特别有经验,所以我不知道从哪里开始.

编辑:似乎"问,你们应该接受"真的有效.

编辑2:查看http://animatorpro.org获取我获取源代码的程序的源代码.豪华油漆也不错,但丹席尔瓦似乎已经从地球上消失了.

decompiling reverse-engineering dos paint disassembly

12
推荐指数
2
解决办法
1170
查看次数

实时绘制1像素厚的别名线

简要背景:我正在研究基于Web的绘图应用程序,我正在实现的工具之一是1像素厚的铅笔.该工具允许用户在画布上绘制1px别名行.

为了确定用户在画布上绘制的位置,将监视鼠标坐标.如果按住mouse1,光标所在的像素将会改变.基本上它就像Photoshop中的铅笔工具一样.

注意:Bresenham的算法不适用于这种情况.我的输入是实时提交的,所以我没有画一条从P0到P1的线,其中P0和P1之间的距离是很多像素.通常,P1是P0的邻居.

我遇到的问题是我生成的线条没有完全干净的1px重量.这是一个例子:

线比较

请注意,两条线都是手绘的,因此存在一些差异.有趣的是,Photoshop能够为我绘制的线条制作更清晰的1px表示.我的线看起来更脏的原因是因为:

Photoshop的路线

我的路线

在我的应用程序中使用该工具进行绘制时,红色像素被填充.在Photoshop中,红色像素未被填充.这是有道理的,因为为了从给定像素移动到例如其东南邻居,要么东或南邻居很可能会被遗弃.光标准确地越过角落进入东南邻居的可能性极小,避免了红色像素的绘制,但这通常不会发生.

所以,我留下的问题是Photoshop如何能够跳过我的线条中出现的红色像素.我唯一能想到的就是等到两个像素排队之后才能绘制其中任何一个,这样我就知道是否有一个"角落邻居"被传递过来.在这种情况下,我不会绘制两个像素中的第一个,因为它相当于我的图中的红色像素.如果用户绘制像素,将光标向南移动一个像素,然后向东移动一个像素,则存在不绘制预期像素的风险.应绘制两个像素,但算法会另外说明.

有任何想法吗?Photoshop如何处理这个问题?

algorithm graphics drawing paint

12
推荐指数
2
解决办法
2515
查看次数

在应用程序窗口的顶部绘制叠加层

我希望能够在我的应用程序窗口上绘制,以便我可以使用一些额外的诊断信息来注释所有小部件,类似于Firefox中的CSS开发人员工具(例如,添加小部件类,样式,突出显示边框等).

我可以遍历小部件树并提取相关信息,但问题是如何使用此信息覆盖所有应用程序窗口?

一种方法是覆盖我QMainWindow的绘画事件,但必须为所有顶级窗口完成.是否有替代方法可以在QDesktopWidget例如上绘画?或者每种QWidget油漆方法的任何钩子?任何涉及子类化的东西QWidget都不适用于标准小部件.

这是我之前提出的问题:

为Mandrill欢呼

编辑:感谢德米特里,我现在有一个非常简单的方法,可以轻松扩展:

class DiagnosticStyle : public QWindowsVistaStyle
{
Q_OBJECT

public: 
    typedef QWindowsVistaStyle BaseStyle;
    void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const;
};


void DiagnosticStyle::drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const
{
    BaseStyle::drawControl(element, option, painter, widget);
    if (widget && painter) {
        // draw a border around the widget
        painter->setPen(QColor("red"));
        painter->drawRect(widget->rect());

        // show the classname of the widget
        QBrush translucentBrush(QColor(255,246,240, 100)); …
Run Code Online (Sandbox Code Playgroud)

qt paint

12
推荐指数
1
解决办法
5757
查看次数

在WinForms按钮中减少文本周围的填充

我有一个将在触摸屏系统上使用的应用程序,它包含许多相当大的按钮(~100px square).

每个按钮将有1到4行文本(通常每行一个单词).

由于按钮中有大量的填充,我不得不减小文本的大小,使其变得几乎不可读,但是如果我能够减少内部填充,那么文本将直接绘制到边框那我就不会有问题了.

我试图将控件的填充减少到零,如下所示,但它没有帮助.

this.Text = _label;
this.Font = new Font(this.Font.FontFamily, (float) _size);
this.Padding = new Padding(0);
Run Code Online (Sandbox Code Playgroud)

问题的一个示例如下所示:

按钮与破碎的文本

正如您所看到的,"OVERVIEW"这个词有足够的空间放在一行上,但是如何在不缩小字体大小的情况下实现这一目标呢?我不喜欢不得不重写控件的文本绘画代码.

编辑:我注意到将填充增加到高达300的各种值,对控件的内部填充没有任何影响.另外,对于信息,我正在使用的按钮是我从Windows.Forms.Button类继承的控件,因为我需要添加一些属性,但是我没有干涉任何Button自己的方法.

.net fonts paint button winforms

12
推荐指数
2
解决办法
7825
查看次数

比赛与提升痛点

编辑
缓慢的编译时间现在可以通过子项目启用的构建大大减轻,这是一个巨大的胜利.

已经从Play的内置资产生成器(即Coffeescript和LESS)转移到第三方Grunt JS ; 现在增量构建期间的代码更改仅受scalac编译时间的限制,而不受Play的相对较慢资产生成的开销限制.

ORIGINAL
总体上非常满意Play 2.1 Scala(2012年9月14日发布,就在切换到Scala 2.10之前); 但是,有一些发展的痛点:

1)路由:在路由改变时,一个人的整个路由 - 控制器结构 can被重新编译:不好.

2)由于路由POST /foo/bar/:id 冲突,REST似乎不被直接支持DELETE /foo/bar/:id; 即路径路径必须是唯一的,可能是反向路由.

3)视图:每个foo动作使用scala.html文件,文件计数增长很快,这意味着构建时间越慢,编译越多; 由于缺乏IDE支持而不支持泛型和盲编码(当然,迄今为止没有scala模板引擎具有IDE支持,AFAIK)是特别棘手的领域.

4)增量构建工作,但过程中的任何内容都不能称为"snappy",即使对scala.html文件进行简单更改,实际上也需要@ 2秒,这是很长一段时间,当你想要即时代码时 - 更改浏览器刷新反馈周期.

我知道Play开发人员正在研究上述一些问题,而慢速构建时间也与sbt,scala版本和自己的代码结构直接相关.总的来说,Play一直是一种愉快的开发体验.然而,这是关于痛苦的,我想知道Lift在这方面带来了什么......

Lift似乎采取了不同的方法.升降机是否会受到以上物品的影响?假设没有,因为MVC,Lift不是,并且xml样式的片段方法可能不会产生与幕后构建机器的一些Play相同的编译时间.

Lift有哪些难点?

point paint lift playframework playframework-2.0

12
推荐指数
2
解决办法
8750
查看次数