- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我添加了 cairo.h 来运行图像处理代码。出现此错误
ccmKP8Gv.o:flow.c:(.text+0x621): undefined reference to
`cairo_format_stride_for_width'
我认为这是一个链接器错误,但我不太确定如何解决它。
有人可以帮忙吗?
代码
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <math.h>
#include <cairo.h>
#ifndef M_PI
#define M_PI 3.1415927
#endif
#define GR(X,Y) (d[(*s)*(Y)+bpp*(X)+((2)%bpp)])
#define GG(X,Y) (d[(*s)*(Y)+bpp*(X)+((1)%bpp)])
#define GB(X,Y) (d[(*s)*(Y)+bpp*(X)+((0)%bpp)])
#define SR(X,Y) (ht[4*tw*((Y)%th)+4*((X)%tw)+2])
#define SG(X,Y) (ht[4*tw*((Y)%th)+4*((X)%tw)+1])
#define SB(X,Y) (ht[4*tw*((Y)%th)+4*((X)%tw)+0])
#define RAD(A) (M_PI*((double)(A))/180.0)
uint8_t *houghtransform(uint8_t *d, int *w, int *h, int *s, int bpp)
{
int rho, theta, y, x, W = *w, H = *h;
int th = sqrt(W*W + H*H)/2.0;
int tw = 360;
uint8_t *ht = ( uint8_t*)malloc(th*tw*4);
memset(ht, 0, 4*th*tw); // black bg
for(rho = 0; rho < th; rho++)
{
for(theta = 0; theta < tw/*720*/; theta++)
{
double C = cos(RAD(theta));
double S = sin(RAD(theta));
uint32_t totalred = 0;
uint32_t totalgreen = 0;
uint32_t totalblue = 0;
uint32_t totalpix = 0;
if ( theta < 45 || (theta > 135 && theta < 225) || theta > 315) {
for(y = 0; y < H; y++) {
double dx = W/2.0 + (rho - (H/2.0-y)*S)/C;
if ( dx < 0 || dx >= W ) continue;
x = floor(dx+.5);
if (x == W) continue;
totalpix++;
totalred += GR(x, y);
totalgreen += GG(x, y);
totalblue += GB(x, y);
}
} else {
for(x = 0; x < W; x++) {
double dy = H/2.0 - (rho - (x - W/2.0)*C)/S;
if ( dy < 0 || dy >= H ) continue;
y = floor(dy+.5);
if (y == H) continue;
totalpix++;
totalred += GR(x, y);
totalgreen += GG(x, y);
totalblue += GB(x, y);
}
}
if ( totalpix > 0 ) {
double dp = totalpix;
SR(theta, rho) = (int)(totalred/dp) &0xff;
SG(theta, rho) = (int)(totalgreen/dp) &0xff;
SB(theta, rho) = (int)(totalblue/dp) &0xff;
}
}
}
*h = th; // sqrt(W*W+H*H)/2
*w = tw; // 360
*s = 4*tw;
return ht;
}
void image_process(char *rgb)
{
cairo_surface_t *inputimg = NULL;
cairo_surface_t *houghimg = NULL;
uint8_t *houghdata = NULL, *inputdata = NULL;
int w, h, s, bpp;
inputimg = cairo_image_surface_create_for_data((unsigned char*)rgb, CAIRO_FORMAT_RGB24, 320, 240, cairo_format_stride_for_width ( CAIRO_FORMAT_RGB24, 320));
w = cairo_image_surface_get_width(inputimg);
h = cairo_image_surface_get_height(inputimg);
s = cairo_image_surface_get_stride(inputimg);
bpp = cairo_image_surface_get_format(inputimg);
switch(bpp)
{
case CAIRO_FORMAT_ARGB32: bpp = 4; break;
case CAIRO_FORMAT_RGB24: bpp = 3; break;
case CAIRO_FORMAT_A8: bpp = 1; break;
default:
fprintf(stderr, "unsupported\n");
goto destroy;
}
inputdata = cairo_image_surface_get_data(inputimg);
houghdata = houghtransform(inputdata, &w, &h, &s, bpp);
printf("w=%d, h=%d\n", w, h);
houghimg = cairo_image_surface_create_for_data(houghdata,
CAIRO_FORMAT_RGB24,
w, h, s);
cairo_surface_write_to_png(houghimg, "hello.png");
destroy:
if (inputimg != NULL) cairo_surface_destroy(inputimg);
if (houghimg != NULL) cairo_surface_destroy(houghimg);
}
最佳答案
确保使用 -lcairo
标志进行编译。
如果您在 Linux 上使用命令行,请像这样操作:
gcc -o main main.c -Wall -Wextra -lcairo
或者,如果您使用的是 IDE,只需将 -lcairo
添加到链接器选项即可。
关于c - cairo,h 的未定义引用错误。如何将它链接到编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253010/
过去我在学习 Cairo 时拍过一些照片,但总是继续支持其他一些图形库。我的问题是我找不到一个很好的教程来为我的表面提供一个简单的显示。我总是在 GTK 或 QT 文档中挖掘与我想做的事情无关的事情。
我的看法 @api_view(['GET']) @renderer_classes((JSONRenderer,TemplateHTMLRenderer,BrowsableAPIRendere
这听起来很简单,但我找不到将 PDF 加载到开罗的方法。我希望能够以与 cairo.ImageSurface.create_from_png 相同的方式执行 cairo.PDFSurface.crea
我在让 Pango Cairo 自动换行时遇到问题。下面是一些演示代码。我将布局的宽度设置为与红色矩形相同,因此我希望它环绕到红色矩形。实际上,它只是在每一行上放置一个单词,就好像宽度设置得很小一样。
这是我的观点: from django.conf import settings from django.http import HttpResponse from django.template.l
我想在 linux (fedora 12) 下使用 GTK 3 创建一个窗口,并使用 cairo-gl 后端在其上绘制一个简单的矩形,为此我想创建一个 cairo-gl 表面。我该怎么做,任何人都可以
我正在尝试从线程绘制到 cairo 图像表面,但出现断言错误: gtk_mt: /build/buildd/cairo-1.10.2/src/cairo-surface.c:385: _cairo_s
我收到 OSError: dlopen() failed to load a library: cairo / cairo-2在新安装后尝试执行 Django 时。使用 Windows。 根据完整的跟
我正在运行 OSX Lion 并尝试为 goocanvas 导入 python 模块, 使用 python2.7. 我设法成功编译了 pygoocanvas-0.14.1,但是当我尝试通过 pytho
我正在使用 Stack 和 Nix 构建一个 Haskell 项目,并依赖于来自 Hackage 的 cairo 库。 当我构建项目时,出现错误:无法找到 pkg-config >= 0.9.0 或
我是开罗的新手,我已经阅读了其网站上的教程/文档。 现在我可以制作线条、矩形,基本上我可以渲染图像但不能渲染文本。 我正在使用以下代码 cairo_select_font_face (cr, "mon
根据cairo example code ,以下代码 double x=25.6, y=128.0; double x1=102.4, y1=230.4, x2=153.6, y2=2
我在两个位置安装了 python,在操作系统中默认为 2.6.6,在/usr/local/bin/python2.7 中为 2.7。 我已经使用 configure/make/make install
我希望我在开罗的文本遵循绘制的路径。类似于 this . 现在这个链接来自a post在声称已经对此进行编码的开罗邮件列表中。只有代码链接位于 svn.gnome.org这似乎已被撤下。我的问题是,有
我正在尝试学习如何使用 Cairo 2D drawing library与 xlib 曲面。 我编写了一个允许创建多个窗口的小测试程序。每个函数可能有一个自定义的paint()函数,定期调用该函数以向
如果我们不检查 cairo 上下文是否存在会发生什么,如果返回 false 会发生什么,例如: bool MyClass::on_draw(const Cairo::RefPtr& cr) {
我在尝试运行以下命令时不断收到此错误: python -m weasyprint http://weasyprint.org weasyprint.pdf 错误: raise OSError("d
我有一个简单的 Cairo 程序,它试图在 600x600 PNG 中绘制由点组成的对角线。但是,每当我尝试使用对 cairo_stroke() 的一次调用来渲染所有点时,输出似乎被截断了。 具体来说
我有一个 cairo_t cr,我可以用它来使用 cairo。我想尝试在这个 cairo 图形上创建一个突出显示效果,它应该执行以下操作之一: 调亮整个图像,使其看起来更亮一些 将背景,即图像的透明部
我正在使用 C++ 和 GTK3 开发一个应用程序,但我被卡住了。我用 glade 创建了一个可视化应用程序,它具有三列,其中一列(中间一列)是 DrawingArea。在那个 DrawingArea
我是一名优秀的程序员,十分优秀!