2010年3月3日水曜日

PNGフォーマット/iCCPチャンクの確認

前回のエントリーにあげた「PNGフォーマット/iCCPチャンクについてのサイト」に沿ってチャンクの名前を確認してみるコードをやってみた.

NSData *inData= [NSData dataWithContentsOfFile:@"/path/to/input.png"];
char *buffer= (char *)malloc(8);
NSRange range= NSMakeRange(0, 8);

[inData getBytes:buffer range:range];
range.location+= 8;

range.length= 4;

while(range.location<[inData length]) {
NSUInteger chunkIndex= range.location;

//chunk length
[inData getBytes:buffer
range:range];
range.location+= 4;
NSUInteger length= ((buffer[0] & 0xff) << 24)
| ((buffer[1] & 0xff) << 16)
| ((buffer[2] & 0xff) << 8)
| (buffer[3] & 0xff);

//chunk type
[inData getBytes:buffer
range:range];
range.location+= 4;
buffer[5]= '\0';
printf("%s", buffer);


//chunk data
range.location+= length;

//chunk check
range.location+= 4;
}
free(buffer);

前回のエントリーでGeneric RGB Profileを設定したケース
IHDR
iCCP
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IEND

前回のエントリーでnilを設定したケース
IHDR
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IDAT
IEND

0 件のコメント: