小编Pat*_*gan的帖子

如何将粗2D线渲染为多边形?

我有一条由2D点列表组成的路径.我想将它们变成一条三角形,以渲染具有指定厚度的纹理线条(和其他类似的东西).因此,2D点的列表基本上需要成为顶点列表,指定多边形的轮廓,如果渲染将呈现该线.问题在于处理拐角连接,斜角,盖帽等.在没有过度拉伸,清洁连接等意义上,所产生的多边形需要是"完美的",以便它可以被挤压或以其他方式玩弄.

是否有任何简单的资源可以提供算法洞察,代码或有效执行此操作的更多信息?

我绝对不想要一个完整的2D矢量库(cairo,antigrain,OpenVG等),包括曲线,弧形,破折号以及所有的铃声和​​口哨声.我一直在挖掘OpenVG实现和其他东西的多个源代码树以找到一些见解,但它们都非常复杂.

我绝对愿意自己编写代码,但有很多退化情况(小段+粗宽+尖角)会产生各种连接问题.即使是一点点帮助也可以节省我数小时的时间来处理它们.

编辑:这是一个例子,如果你只是从顶点到顶点,那些导致丑陋的退化情况.红色是原始路径.橙色块是以指定宽度绘制的矩形,对齐并以每个段为中心.

http://www.freeimagehosting.net/uploads/52dc639727.png

opengl geometry path line miter

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

如何对图像进行高质量缩放?

我正在编写一些代码来缩放C/C++中的32位RGBA图像.我已经写过一些有些成功的尝试,但它们很慢,最重要的是尺寸图像的质量是不可接受的.

我比较了由OpenGL(即我的视频卡)和我的例程缩放的相同图像,它的质量相差几英里.我已经搜索了Google代码,搜索了我认为可以解决一些问题的源代码树(SDL,Allegro,wxWidgets,CxImage,GD,ImageMagick等),但通常他们的代码要么是错综复杂的,要么分散在各处或者是谜语汇编程序,很少或没有评论.我还阅读了维基百科和其他地方的多篇文章,我只是没有找到我需要的明确解释.我理解插值和采样的基本概念,但我很难让算法正确.我不想依赖外部库来完成一个例程,并且必须转换为它们的图像格式并返回.此外,无论如何,我想知道如何自己做.:)

我之前看过一个关于堆栈溢出问题的类似问题,但它并没有真正以这种方式回答,但我希望有人可以帮我推动我朝着正确的方向前进.也许指点我一些文章或伪代码......任何可以帮助我学习和做的事情.

这是我正在寻找的:

  1. 没有汇编程序(我正在为多种处理器类型编写非常可移植的代码).
  2. 没有外部库的依赖.
  3. 我主要关注的是缩放DOWN,但是稍后还需要编写一个扩展例程.
  4. 结果的质量和算法的清晰度是最重要的(我可以在以后优化它).

我的例程基本上采用以下形式:

DrawScaled(uint32 *src, uint32 *dst, 
      src_x, src_y, src_w, src_h, 
      dst_x, dst_y, dst_w, dst_h );
Run Code Online (Sandbox Code Playgroud)

谢谢!

更新:为了澄清,我需要一些比盒子重新采样更先进的东西用于降尺度,这会使图像模糊不清.我怀疑我想要的是某种双三次(或其他)滤波器,它与双三次升频算法有些相反(即每个目标像素都是从所有贡献的源像素计算出来的,并结合了保持锐利的加权算法.

这是我从wxWidgets BoxResample算法得到的例子与我想要的256x256位图缩放到55x55的例子.

  • www.free_image_hosting.net/uploads/1a25434e0b.png

最后:

  • www.free_image_hosting.net/uploads/eec3065e2f.png

原始的256x256图像

c c++ image-manipulation image image-scaling

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

有没有一种正确的方法通过C++引用返回一个新的对象实例?

所以我写了一些代码,我有这样的事情:

class Box
{
    private:
    float x, y, w, h;

    public:
    //...
    Rectangle & GetRect( void ) const
    {
        return Rectangle( x, y, w, h );
    }
};
Run Code Online (Sandbox Code Playgroud)

然后在一些代码中:

Rectangle rect = theBox.GetRect();
Run Code Online (Sandbox Code Playgroud)

哪个在我的调试版本中有效,但在发行版中有"问题"通过引用返回Rectangle - 我基本上得到了一个未初始化的矩形.Rectangle类有一个=运算符和一个复制构造函数.在没有弄清楚为什么会破坏的情况下,我实际上更感兴趣的是通过引用返回(新)对象的正确方法,以便复制分配给变量.我只是傻吗?不应该这样做吗?我知道我可以返回一个指针,然后取消引用,但我不愿意.我的某些部分感觉像按值返回会导致对象的冗余复制 - 编译器是否会解决并优化它?

这似乎是一个微不足道的问题.经过多年的C++编码后,我感到尴尬,我不知道这一点,所以希望有人可以为我清除这一点.:)

c++ return reference object variable-assignment

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

如何以相当便携的方式以编程方式检查内存使用?(C/C++)

我正在编写跨平台的C++代码(Windows,Mac).有没有办法检查当前进程使用了​​多少内存?一个非常人为的片段来说明:

unsigned long m0 = GetMemoryInUse();
char *p = new char[ random_number ];
unsigned long m1 = GetMemoryInUse();
printf( "%d bytes used\n", (m1-m0) );
Run Code Online (Sandbox Code Playgroud)

当然(m1-m0)应该等于random_number,但我试图在更复杂的层面上做这件事,包括可能分配内存的库调用.

以下不是优选的:

  1. 使用Valgrind(或其同类)
  2. 使用自定义内存分配器来跟踪分配的内存.

c++ memory portability

15
推荐指数
2
解决办法
5093
查看次数

如何从 macOS 命令行工具使用 Apple 的 GameController 框架?

我正在尝试将以下代码用作 macOS 命令行工具。重要的是这不是 Cocoa 应用程序,所以这不是一个选项。

相同的代码在具有 Cocoa App 目标的同一个项目中完美运行并检测到兼容的控制器,但是当作为命令行工具目标运行时,没有任何反应并且 API 显示没有连接控制器。

显然,其中一些是人为设计的……这只是我可以将其归结为最简单的方法,并在实际工作时对发生的事情有一些指示。

#import <Cocoa/Cocoa.h>
#import <GameController/GameController.h>


int main( int argc, const char * argv[] )
{
    @autoreleasepool
    {
        NSApplication * application = [NSApplication sharedApplication];

        NSNotificationCenter * center = [NSNotificationCenter defaultCenter];

        [center addObserverForName: GCControllerDidConnectNotification
                            object: nil
                             queue: nil
                        usingBlock: ^(NSNotification * note) {
                            GCController * controller = note.object;
                            printf( "ATTACHED: %s\n", controller.vendorName.UTF8String );
                        }
         ];

        [application finishLaunching];

        bool shouldKeepRunning = true;
        while (shouldKeepRunning)
        {
            printf( "." );

            while (true)
            {
                NSEvent …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c core-foundation gamecontroller

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

Xgrid如何与Xcode一起进行并行编译?

我对使用Xgrid来加速我在多台机器上编译Xcode的想法很感兴趣...但似乎很难找到有关人们使用它的经验,任何陷阱等的任何信息.我​​没有多个Mac那样的我现在可以测试它,所以我很好奇.

你试过吗?它对你有多好?你看到了什么样的加速?

parallel-processing macos xcode compilation xgrid

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