here it is a color conversion method i use. hoping this will help. int ColorConverter::ConvertColor(AIColor* srcCol, AIColorConversionSpaceValue dstSpace, AIColor *dstCol, AIReal srcAlpha, AIReal *dstAlpha) { // determine srcCol's space and sample size: AIColorConversionSpaceValue srcSpace; int srcSize; bool srcHasAlpha = srcAlpha < 1; switch (srcCol->kind) { case kGrayColor: srcSize = 1; if (srcHasAlpha) srcSpace = kAIAGrayColorSpace; else srcSpace = kAIGrayColorSpace; break; case kThreeColor: srcSize = 3; if (srcHasAlpha) srcSpace = kAIARGBColorSpace; else srcSpace = kAIRGBColorSpace; break; case kFourColor: srcSize = 4; if (srcHasAlpha) srcSpace = kAIACMYKColorSpace; else srcSpace = kAICMYKColorSpace; break; default: return -1; } bool dstHasAlpha = dstSpace == kAIACMYKColorSpace || dstSpace == kAIARGBColorSpace || dstSpace == kAIAGrayColorSpace; if (srcSpace >= 0 && dstSpace >= 0) { AISampleComponent src[5]; AISampleComponent dst[5]; memcpy(src, &srcCol->c, srcSize * sizeof(AISampleComponent)); if (srcHasAlpha) src[srcSize] = srcAlpha; // TODO: why swapping kGrayColor??? if (srcCol->kind == kGrayColor) src[0] = 1.0f - src[0]; ASBoolean inGamut; AIColorConvertOptions options; sAIColorConversion->ConvertSampleColor(srcSpace, src, dstSpace, dst, options, &inGamut); if (dstCol == NULL) dstCol = new AIColor; // init the destCol with 0 // memset(dstCol, 0, sizeof(AIColor)); // determine dstCol's kind and sampleSize: int dstSize; switch (dstSpace) { case kAIMonoColorSpace: case kAIGrayColorSpace: case kAIAGrayColorSpace: dstCol->kind = kGrayColor; dstSize = 1; break; case kAIRGBColorSpace: case kAIARGBColorSpace: dstCol->kind = kThreeColor; dstSize = 3; break; case kAICMYKColorSpace: case kAIACMYKColorSpace: dstCol->kind = kFourColor; dstSize = 4; break; default: return NULL; } // TODO: why swapping kGrayColor??? if (dstCol->kind == kGrayColor) dst[0] = 1.0f - dst[0]; memcpy(&dstCol->c, dst, dstSize * sizeof(AISampleComponent)); // get back alpha: if (dstAlpha != NULL) *dstAlpha = dstHasAlpha ? dst[dstSize] : 1; return 0; } return -1; } best regards, Thomas.
... View more