cmp中的bmp图像到矩阵(2d数组)

时间:2015-07-07 15:51:12

标签: c arrays image bitmap bmp

我需要使用C语言将bmp(RGB 24位)图像放入2D数组中。 我写了一些函数,但这些函数只适用于方形图像。 我创建了这个结构来存储像素:

select ... from SOURCE where ID > {max ID from TARGET} order by ID;

我还创建了两个int extern值Y和X来存储图像的高度和宽度。 这是代码(我省略了setWidthHeight和CreateNewImage函数,因为我确信它们有效)

typedef struct{
int red;
int green;
int blue;
}pixel;

当图像是方形时,没有问题,但是:

  • height> width:当我尝试读取bitmapin()中的第一个像素时,我收到错误“BAD_ACCESS ...”
  • width> height:第一行像素是OK。但左侧是右侧的副本,有更多的蓝色和非常小的绿色。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

当您将值传输到数组中时,您已经交换了x和y。我认为。这不像我已经测试过这个或任何东西。对此太懒了。

for (i=Y-1; i>=0; i-- ) {
    for (p=0; p<X; p++) {
        n=fread(&img1[i][p].blue

i遍历Yp遍历X

当你对它进行malloc时,你可以将其设置为img [x] [y]

theArray=(pixel**) malloc(X*sizeof(pixel*));
for (int i=0; i<X; i++) {
    theArray[i]=(pixel*) malloc(Y*sizeof(pixel));

一般建议:远离全局变量,为此,我会传递变量,因为你已经注释掉了。将变量命名为te。你有什么回报29,30,31值?尝试使用名称的枚举或#defines。 (之后你只是忽略了返回值)

这个bug不明显的最大原因可能是命名方案。我和p?来吧,传入sizeX和sizeY,并将x和y作为工作变量。如果上下文不是bitmapin(),则变量甚至应该是bitmapSizeX。命名很重要。