- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在努力为 XPM 图像分配内存。
我创建了自己的库,具有以下功能:
XPM* initXPM (
unsigned int width,
unsigned int height,
unsigned int cpp,
unsigned int ncolors )
{
XPM *image;
image=(XPM*)malloc(sizeof(Color*) * (width * height) * cpp);
(*image).colta = (Color*) malloc(ncolors * sizeof(Color));
(*image).width = width;
(*image).height = height;
(*image).cpp = cpp;
(*image).ncolors = ncolors;
int i;
for (i = 0; i < ncolors; i++)
{
(*image).colta[i].pchars = (char*) malloc((cpp + 1) * sizeof(char));
}
(*image).data = (unsigned int**)malloc(height * sizeof(unsigned int*));
for (i = 0; i < height; i++)
{
(*image).data[i] = (unsigned int*) malloc(width * sizeof(unsigned int));
}
printf("init :height : %d , width :%d ncolors:%d , cpp : %d\n",(*image).height,(*image).width,(*image).ncolors,(*image).cpp);
return image;
}
XPM 结构如下所示:
typedef struct
{
unsigned int r,g,b; /* the red, green and blue components */
char *pchars; /* pointer to the character(s) combination */
} Color;
/* the number of characters for one color is contained into the XPM structure */
typedef struct
{
unsigned int width; /* width in pixels */
unsigned int height;
unsigned int cpp; /* number of characters per pixel */
unsigned int ncolors; /* how many colors we'll be using */
Color *colta; /* colors array */
unsigned int **data; /* the area that contains the image, */
/* width x height locations for */
/* indices into colta */
} XPM;
我是这样调用init函数的:
XPM *image;
image = initXPM(200,200,1,2);
我已经成功地用值 :(50,50,2,50) 初始化了 XPM 文件。如果我尝试用 200
而不是 50
来初始化文件它崩溃了。
我想创建一个 200x200 XPM 文件,但它中断了。使用 electricfence 我发现当我设置图像的宽度时它会崩溃。
我应该如何分配内存才能像这样使用它?
我尝试对结构进行一些修改,如果我在 main 方法中静态声明结构并将 XPM 图像的地址发送到 init 函数,它就会起作用,但我希望能够像库一样使用它。
最佳答案
image=(XPM*)malloc(sizeof(Color*) * (width * height) * cpp);
显然是错误的,但是由于这为除最小图像之外的所有图像分配了太多内存,因此它不会导致您提到的崩溃。尽管如此
image = malloc(sizeof *image);
是一个正确的分配
initXPM(200, 200, 2, 50);
在我的系统上不会崩溃
您应该使用调试器(例如gdb
)而不是efence
来分析问题。
关于c - XPM 图像内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28817552/
我正在努力为 XPM 图像分配内存。 我创建了自己的库,具有以下功能: XPM* initXPM ( unsigned int width, unsigned int height,
我对 svn 很陌生(基本上,我只知道如何使用诸如 ci、co、rm、add、stat 和 diff 之类的东西,但没有技术细节),我正在尝试检查一大块代码. 我正在从最顶部(使用“.”)进行 che
我正在尝试了解实现 Tridion XPM 的不同工件。不幸的是,我没有找到任何文章可以回答我的问题。 例如,内容交付服务器(在 WebSphere 上)可以有四种不同的应用程序,一种用于内容交付(处
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: How to open and edit images in Emacs 我知道Vim和XEmacs可以修改XPM图
这个问题在这里已经有了答案: Split a String into an array in Swift? (41 个回答) 已关闭 8 年前。
在 GIMP 中,您可以将图像保存为 C 头文件。我使用 XPM 文件执行此操作,如下图所示: 如果我将 XPM 图像保存为 C 头文件,GIMP 将输出 this C header file . 为
这次我关于 XPM 的问题比较简单。这是关于创建页面类型,编辑器可以使用它来建立新的网站页面。定义页面类型时,您可以使用现有页面将其启用为示例页面,包括其组件。您可以复制这些组件,使编辑人员能够自由编
我是一名优秀的程序员,十分优秀!