我正在尝试确定为从文件读取的动态像素数分配内存的最佳方法。我有来自头文件的像素数据的字节数。
我正在尝试以下方式,但缺少一些东西。
typedef struct {
unsigned char blue;
unsigned char green;
unsigned char red;
} pixel_t;
for(i = 0; i <= ((bmp->dib.bmp_bytesz) / 3); i++) {
// Something here?
}
我正在尝试确定为从文件读取的动态像素数分配内存的最佳方法。我有来自头文件的像素数据的字节数。
我正在尝试以下方式,但缺少一些东西。
typedef struct {
unsigned char blue;
unsigned char green;
unsigned char red;
} pixel_t;
for(i = 0; i <= ((bmp->dib.bmp_bytesz) / 3); i++) {
// Something here?
}
好吧,内存分配可能不会按照您的指示进行:
pixel_t *pixels = malloc(((bmp->dib.bmp_bytesz/3)+1) * sizeof(*pixels));
if (pixels == 0)
...deal with out of memory error...
for (int i = 0; i <= bmp->dib.dmp_bytesz/3; i++)
{
pixels[i].blue = ...;
pixels[i].green = ...;
pixels[i].red = ...;
}
+1
允许在循环中<=
。for
仔细检查<=
是否正确;<
在for
循环中使用更常见。
对于
...
,如果我有一个char
数组中的像素怎么办?我怎样才能逐步通过它并复制到像素中?
您可以通过以下两种方式中的任何一种来完成。假设像素数组在 中unsigned char *pixel_array;
,那么您可以使用:
unsigned char *p = pixel_array;
for (int i = 0; i <= bmp->dib.dmp_bytesz/3; i++)
{
pixels[i].blue = *p++;
pixels[i].green = *p++;
pixels[i].red = *p++;
}
或者:
for (int i = 0; i <= bmp->dib.dmp_bytesz/3; i++)
{
pixels[i].blue = pixel_array[i*3+0];
pixels[i].green = pixel_array[i*3+1];
pixels[i].red = pixel_array[i*3+2];
}
只要确保你得到正确的蓝色,绿色,红色序列。
在 for 循环中做某事之前需要为像素分配内存。
typedef struct {
unsigned char blue;
unsigned char green;
unsigned char red;
} pixel_t;
pixel_t *pixel = (pixel_t *)malloc(bmp->dib.bmp_bytesz);
if(pixel == NULL) { exit(-1); }
for(i = 0; i < ((bmp->dib.bmp_bytesz) / 3); i++) {
// Something here?
pixel[i].blue = bmp->dib[3 * i];
pixel[i].green = bmp->dib[3 * i + 1];
pixel[i].red = bmp->dib[3 * i + 2];
}