2012-02-16 1 views
1

次のコードでコンパイラの警告(警告:キャストによりターゲットタイプの整列が必要になる)を回避する方法を教えてください。ワードアライメント?

static int fill_color24 (VisVideo *video, VisColor *color) 
{ 
    int x, y; 
    uint32_t *buf; 
    uint8_t *rbuf = visual_video_get_pixels (video); 
    uint8_t *buf8; 

    int32_t cola = 
     (color->b << 24) | 
     (color->g << 16) | 
     (color->r << 8) | 
     (color->b); 
    int32_t colb = 
     (color->g << 24) | 
     (color->r << 16) | 
     (color->b << 8) | 
     (color->g); 
    int32_t colc = 
     (color->r << 24) | 
     (color->b << 16) | 
     (color->g << 8) | 
     (color->r); 

    for (y = 0; y < video->height; y++) { 
     buf = (uint32_t *) rbuf; // warning is for this line 

     for (x = video->width; x >= video->bpp; x -= video->bpp) { 
      *(buf++) = cola; 
      *(buf++) = colb; 
      *(buf++) = colc; 
     } 

     buf8 = (uint8_t *) buf; 
     *(buf8++) = color->b; 
     *(buf8++) = color->g; 
     *(buf8++) = color->r; 


     rbuf += video->pitch; 
    } 

    return VISUAL_OK; 
} 

答えて

1

私はあなたができると確信しています。この関数は、色配列を整列していない状態で返します。あなたはそこから単語を読むことができるように何もすることはできません。 コンポーネント(uint8_t)で色を読み取ってから、追加およびシフトすることでuint32_tを構築する必要があります。