Substituindo CMNewProfileSearch com, o código de não-preterido 64 bits
-
03-07-2019 - |
Pergunta
Eu tenho o código existente que usa CMNewProfileSearch
para encontrar, em seguida, iterar sobre os perfis de cor no sistema de obtenção de seus nomes e caminhos completos. Infelizmente, CMNewProfileSearch
está obsoleta no Mac OS X 10.5 e também está disponível quando a compilação de um aplicativo de 64 bits.
Ao ler o 2.5 Referência ColorSync Manager, parece que a nova forma de interagir sobre instalada perfis de cores é usar a função CMIterateColorSyncFolder
.
- É verdade?
- Existe uma maneira de cacau para fazer o que eu quero em vez?
- Alguém tem qualquer código de exemplo?
Graças.
Solução
-
Sim. Como você indicou, a ColorSync Reference Manager diz o seguinte:
A função CMNewProfileSearch não aproveitar ao máximo o perfil otimizado busca de partida disponível com ColorSync versão 2.5. Use CMIterateColorSyncFolder em seu lugar.
-
CMIterateColorSyncFolder
é a funcionário maneira de fazer isso. Além disso, é também o Optimizado caminho. -
A partir ImageApp da Apple código de exemplo :
EDIT:. Eu modificado o código de exemplo para remover NewCMProfileIterateUPP
e DisposeCMProfileIterateUPP
// Callback routine with a description of a profile that is
// called during an iteration through the available profiles.
//
static OSErr profileIterate (CMProfileIterateData *info, void *refCon)
{
NSMutableArray* array = (NSMutableArray*) refCon;
Profile* prof = [Profile profileWithIterateData:info];
if (prof)
[array addObject:prof];
return noErr;
}
// return an array of all profiles
//
+ (NSArray*) arrayOfAllProfiles
{
NSMutableArray* profs=[[NSMutableArray arrayWithCapacity:0] retain];
CMIterateColorSyncFolder(profileIterate, NULL, 0L, profs);
return (NSArray*)profs;
}
Acontece que não precisa NewCMProfileIterateUPP
e DisposeCMProfileIterateUPP
para que eles não foram substituídos com qualquer coisa, tanto quanto eu posso dizer. Em vez disso, você pode definir a função de retorno com uma assinatura que partidas profileIterate
, acima. Você pode, então, basta passar a função de retorno diretamente para CMIterateColorSyncFolder
.
Eu testei as minhas alterações no ImageApp no Mac OS X 10.5 ele funciona como esperado.