I though I'd mention the srfi-4 unit and it's
u32vector. This may come in handy for your particular struct. While make-blobs are great for allocating managed memory for arbitrary structs, you can sometimes use
make-s32vector, for example, where the struct is basically an array like yours.
Note that this may not be a good idea if your struct members are just using "int" because you wouldn't know if it's a s32vector or a s64vector. Also, your foreign-type would go from (pointer (struct "color")) to a
u32vector which means you may have to cast it to a (struct color*) in C. However, it does make extracting the individual color-components much easier than having to work with raw blobs.
Because size of an "int" can generally be either 32 or 64-bit depending on your architecture, the srfi-4 vectors are possible better suited for floats and doubles where the sizes are all set. It's worth knowing about them though.
Cheers,
K.