- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个关于 C 中字符串生成的小问题。以下代码片段是用于生成图像(mandelbrot、渐变等)的 Python/Tkinter 应用程序的 C 扩展的一部分。在有人问之前:我不想为这样一个简单的任务启动 Photoshop - 矫枉过正......
我遇到的问题是在最后一个 for 循环的代码片段的末尾。此函数生成 PPM 图像文件以供进一步处理。主要目标是生成一个包含二进制格式的栅格数据的字符串,并将该字符串传回 Python,然后传给 Tkinter 图像数据以预览结果。
目前我将文件写入磁盘的速度非常慢。迭代器函数返回指向 RGB 数组的指针。如果我现在使用
将每个颜色值写入文件fputc(col[0], outfile)
它有效(被注释掉的部分)。为了更接近我的主要目标,我尝试将三个颜色值合并为一个字符串并将其写入文件。当我从我的 Python 应用程序运行该代码时,我最终得到一个仅包含 header 的文件。
谁能给我指出正确的方向?整个 C 事物对我来说都是全新的 - 所以我几乎被困在这里......
static PyObject* py_mandelbrotppm(PyObject* self, PyObject* args)
{
//get filename from argument
char *filename;
PyArg_ParseTuple(args, "s", &filename);
//---------- open file for writing and create header
FILE *outfile = NULL;
outfile = fopen(filename, "w");
//---------- create ppm header
char header[17];
sprintf(header,"P6\n%d %d\n255\n", dim_x, dim_y);
fputs(header, outfile);
//---------- end of header generation
for(int y = 0;y<dim_y;y++)
{
for(int x = 0;x<dim_x;x++)
{
int *col = iterator(x,y);
char pixel[3] = {col[0], col[1], col[2]};
fputs(pixel, outfile);
/*
for(int i = 0;i<3;i++)
{
fputc(pixel[i], outfile);
}
*/
}
}
fclose(outfile);
Py_RETURN_NONE;
}
最佳答案
您的新代码有几个问题。
pixel
缺少空终止符(及其空格)。像这样修复它:
char pixel[4] = {col[0], col[1], col[2], '\0'};
但我会告诉你一个小 secret 。将一堆 int
放入 char
数组中会截断它们并做各种奇怪的事情。可能不适用于 char
长度的数字,但就一般风格而言,我不推荐它。考虑一下:
...
for(int x = 0;x<dim_x;x++){
int *col = iterator(x,y);
fprintf(outfile, "%d, %d, %d", col[0], col[1], col[2]);
}
...
另一方面,我有点困惑为什么 iterator
在 RGB 值是 0-255 时返回 int,这恰好是 unsigned char
的范围> 有:
unsigned char *col = iterator(x,y);
fprintf(outfile, "%u, %u, %u", col[0], col[1], col[2]);
关于python - 如何创建包含 ppm 图像的二进制光栅数据的 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25485797/
我正在尝试使用 R 中的 raster 包从光栅对象中提取轮廓线。 rasterToContour 似乎工作良好并且绘制得很好,但在调查时发现轮廓线被分解成不规则的线段。来自 ?rasterToCon
我有两个光栅对象 > x1 class : RasterLayer dimensions : 36, 72, 2592 (nrow, ncol, ncell) resolution
我已经看到与CUPS库相关的两个文件: OpenPrinting/cups-filters/blob/master/filter/imagetoraster.c OpenPrinting/cups-f
有没有办法确保绘图周围的框与栅格范围完全匹配?在下面的内容中,根据设备的比例,在栅格的上方,下方或左侧和右侧都有一个间隙: require(raster) r = raster() r[]= 1 pl
我有下面的代码,可以将图像保存到我的电脑上。我想将该图像绕其中心(或左下角)旋转 45,90 和 135 度,然后另存为 3 个不同的图像。我怎样才能做到这一点? library(raster) r1
我有热敏打印机 X330,我需要打印和从 android 相机获取图像(位图),但我不能...我总是在打印机中得到符号。 文档中说: 打印光栅位图 十六进制 1D 76 30 m xL xH yL y
我是 python 的初学者,我仍在熟悉它的库,如果这是一个新手问题,我很抱歉。我只想显示 4 个波段(R、G、B、NIR)的图像。我想删除 NIR 并保留其他 3 个。我该怎么做?由于 raster
我知道这似乎是一个奇怪的问题,而且确实如此!但是利用 Windows 已经安装的固定宽度字体(例如:Fixedsys)我会节省很多大小(因为我想让最终的 EXE 尽可能小) 从 Windows 上现有
要求: 保留图形模式 API 仅适用于 2D 对象(尽管这些 2D 对象的 3D 变换很有趣) 跨平台 矢量图形绘制 光栅合成 + 支持不透明蒙版 - 当然是硬件加速... 动画 API 封装大小 -
我还在 SO 的 GIS 部分发布了这个问题。因为我不确定这是否是一个“纯”python 问题,所以我也在这里再次提问。 我想知道是否有人在不使用 ArcGIS 的情况下从栅格获取高程数据有一些经验,
我是一名优秀的程序员,十分优秀!