Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MacFaceLibrary/FaceDef.cs

    r19 r30  
    1818        public class FaceDef
    1919        {
     20                // ƒpƒ^[ƒ“ƒXƒC[ƒgID
    2021                public enum PatternSuite
    2122                {
     
    2526                }
    2627
     28                public const int PatternCount = 11;
     29                public const int ImageWidth   = 128;
     30                public const int ImageHeight  = 128;
     31
     32                // ƒ}[ƒJ[
    2733                public const int MarkerNone    = 0x00;
    2834                public const int MarkerPageIn  = 0x01;
    2935                public const int MarkerPageOut = 0x02;
    3036
     37                // Šçƒpƒ^[ƒ“’è‹`ƒvƒƒpƒeƒBƒŠƒXƒgƒtƒ@ƒCƒ‹–¼
    3138                private const string FaceDefName = "faceDef.plist";
    32                 private const int PatternCols = 11;
    33                 private const int PatternRows = 3;
    34                 private const int ImageWidth = 128;
    35                 private const int ImageHeight = 128;
    36 
     39
     40                // Šçƒpƒ^[ƒ“’è‹`‚̃L[–¼Ì
     41                private const string KeyInfoTitle       = "title";
     42                private const string KeyInfoAuthor      = "author";
     43                private const string KeyInfoVersion     = "version";
     44                private const string KeyInfoSiteURL     = "web site";
     45               
     46                private const string KeyDefParts        = "parts";
     47                private const string KeyDefPatterns     = "pattern";
     48                private const string KeyDefMarkers      = "markers";
     49                private const string KeyDefTitlePattern = "title pattern";
     50
     51                private const string KeyPartImage       = "filename";
     52                private const string KeyPartPosX        = "pos x";
     53                private const string KeyPartPosY        = "pos y";
     54
     55                //
    3756                private string _path;
    3857                private string _title;
     
    5877                        // î•ñ
    5978                        _path = path;
    60                         _title = (def.ContainsKey("title") ? def["title"] as string : String.Empty);
    61                         _author = (def.ContainsKey("author") ? def["author"] as string : String.Empty);
    62                         _version = (def.ContainsKey("version") ? def["version"] as string : String.Empty);
    63 
    64                         if (def.ContainsKey("web site"))
     79                        _title = ReadInfoString(def, KeyInfoTitle);
     80                        _author = ReadInfoString(def, KeyInfoAuthor);
     81                        _version = ReadInfoString(def, KeyInfoVersion);
     82
     83                        if (def.ContainsKey(KeyInfoSiteURL))
    6584                        {
    6685                                try
    6786                                {
    68                                         _webSite = new Uri(def["web site"] as string);
     87                                        _webSite = new Uri(def[KeyInfoSiteURL] as string);
    6988                                }
    7089                                catch (UriFormatException) {}
     
    7392
    7493                        // ƒp[ƒc‚̓ǂݍž‚Ý
    75                         ArrayList partDefList = (ArrayList)def["parts"];
     94                        ArrayList partDefList = (ArrayList)def[KeyDefParts];
    7695                        if (partDefList == null)
    7796                        {
     
    82101                        for (int i = 0; i < partDefList.Count; i++)
    83102                        {
    84                                 Hashtable partDef = (Hashtable)partDefList[i];
    85                                 string filename = (String)partDef["filename"];
    86                                 int x = (int)partDef["pos x"];
    87                                 int y = (int)partDef["pos y"];
    88                                 _parts[i] = new Part(System.IO.Path.Combine(path, filename), x, y);
    89                         }
     103                                _parts[i] = ReadPart(path, (Hashtable)partDefList[i]);
     104            }
    90105
    91106                        // ƒpƒ^[ƒ“‚̓ǂݍž‚Ý
    92                         ArrayList suiteDefList = (ArrayList)def["pattern"];
    93                         _patternSuites = new Part[PatternRows][][];
    94                         for (int i = 0; i < PatternRows; i++)
    95                         {
    96                                 ArrayList suiteDef = (ArrayList)suiteDefList[i];
    97                                 Part[][] suite = new Part[PatternCols][];
    98                                 for (int j = 0; j < PatternCols; j++)
    99                                 {
    100                                         ArrayList patternDef = (ArrayList)suiteDef[j];
    101                                         Part[] pattern = new Part[patternDef.Count];
    102                                         for (int k = 0; k < patternDef.Count; k++)
    103                                         {
    104                                                 pattern[k] = _parts[(int)patternDef[k]];
    105                                         }
    106                                         suite[j] = pattern;
    107                                 }
    108                                 _patternSuites[i] = suite;
     107            int suiteCount = PatternSuite.GetNames(typeof(PatternSuite)).Length;
     108            ;
     109            ArrayList suiteDefList = (ArrayList)def[KeyDefPatterns];
     110            _patternSuites = new Part[suiteCount][][];
     111            for (int i = 0; i < suiteCount; i++)
     112            {
     113                                _patternSuites[i] = ReadPatternSuite(_parts, (ArrayList)suiteDefList[i]);
    109114                        }
    110115
    111116                        // ƒ}[ƒJ[‚̓ǂݍž‚Ý
    112                         ArrayList markerDefList = (ArrayList)def["markers"];
     117                        ArrayList markerDefList = (ArrayList)def[KeyDefMarkers];
    113118                        _markers = new Part[markerDefList.Count];
    114119                        for (int i = 0; i < markerDefList.Count; i++)
     
    118123
    119124                        // ƒ^ƒCƒgƒ‹ƒpƒ^[ƒ“‚̓ǂݍž‚Ý
    120                         ArrayList titlePatternDef = (ArrayList)def["title pattern"];
    121                         _titlePattern = new Part[titlePatternDef.Count];
    122                         for (int i = 0; i < titlePatternDef.Count; i++)
    123                         {
    124                                 _titlePattern[i] = _parts[(int)titlePatternDef[i]];
    125                         }
    126                 }
    127 
    128                 public Uri WebSite
    129                 {
     125                        _titlePattern = ReadPattern(_parts, (ArrayList)def[KeyDefTitlePattern]);
     126                }
     127
     128                private string ReadInfoString(Hashtable def, string key)
     129                {
     130                        string str = def[key] as string;
     131                        return str != null ? str : "";
     132                }
     133
     134                private Part ReadPart(string path, Hashtable partDef)
     135                {
     136                        string filename = (String)partDef[KeyPartImage];
     137                        string imgPath = System.IO.Path.Combine(path, filename);
     138                        Image img = Image.FromFile(imgPath);
     139
     140                        int x = (int)partDef[KeyPartPosX];
     141                        int y = ImageHeight - (int)partDef[KeyPartPosY] - img.Height;
     142
     143                        return new Part(imgPath, img, x, y);
     144                }
     145
     146                private Part[] ReadPattern(Part[] parts, ArrayList patternDef)
     147                {
     148                        Part[] pattern = new Part[patternDef.Count];
     149                        for (int i = 0; i < patternDef.Count; i++)
     150                        {
     151                                pattern[i] = _parts[(int)patternDef[i]];
     152                        }
     153                        return pattern;
     154                }
     155
     156                private Part[][] ReadPatternSuite(Part[] parts, ArrayList suiteDef)
     157                {
     158                        Part[][] suite = new Part[PatternCount][];
     159                        for (int i = 0; i < PatternCount; i++)
     160                        {
     161                                suite[i] = ReadPattern(_parts, (ArrayList)suiteDef[i]);
     162                        }
     163                        return suite;
     164                }
     165
     166
     167        public string Path
     168        {
     169            get { return _path; }
     170        }
     171
     172        public string Title
     173        {
     174            get { return _title; }
     175        }
     176
     177        public string Author
     178        {
     179            get { return _author; }
     180        }
     181
     182        public string Version
     183        {
     184            get { return _version; }
     185        }
     186
     187        public Uri WebSite
     188        {
    130189                        get { return _webSite; }
    131190                }
    132191
    133                 public string /*Version*/ Version
    134                 {
    135                         get { return _version; }
    136                 }
    137 
    138                 public string Author
    139                 {
    140                         get { return _author; }
    141                 }
    142 
    143                 public string Title
    144                 {
    145                         get { return _title; }
    146                 }
    147 
    148                 public string Path
    149                 {
    150                         get { return _path; }
    151                 }
    152 
    153                 public Image TitleImage()
    154                 {
    155                         Bitmap image = new Bitmap(ImageWidth, ImageHeight);
    156                         Graphics g = Graphics.FromImage(image);
    157 
    158                         foreach (Part part in _titlePattern)
     192                public Image TitleImage
     193                {
     194                        get
     195                        {
     196                                Bitmap image = new Bitmap(ImageWidth, ImageHeight);
     197                                Graphics g = Graphics.FromImage(image);
     198
     199                                foreach (Part part in _titlePattern)
     200                                {
     201                                        g.DrawImage(part.Image,
     202                                                part.Point.X, part.Point.Y,
     203                                                part.Image.Size.Width, part.Image.Size.Height);
     204                                }
     205
     206                                g.Dispose();
     207                                return image;
     208                        }
     209                }
     210
     211                public void DrawPatternImage(Graphics g, PatternSuite suite, int no, int markers, float rate)
     212                {
     213                        Part[] pattern = _patternSuites[(int)suite][no];
     214                        foreach (Part part in pattern)
    159215                        {
    160216                                g.DrawImage(part.Image,
    161                                         part.Point.X, part.Point.Y,
    162                                         part.Image.Size.Width, part.Image.Size.Height);
    163                         }
    164 
    165                         g.Dispose();
    166                         return image;
     217                                        part.Point.X * rate, part.Point.Y * rate,
     218                                        part.Image.Size.Width * rate, part.Image.Size.Height * rate);
     219                        }
     220
     221                        if (markers != 0)
     222                        {
     223                                for (int i = 0; i < 8; i++)
     224                                {
     225                                        if ((markers & (1 << i)) != 0)
     226                                        {
     227                                                Part part = _markers[i];
     228                                                g.DrawImage(part.Image,
     229                                                        part.Point.X * rate, part.Point.Y * rate,
     230                                                        part.Image.Size.Width * rate, part.Image.Size.Height * rate);
     231                                        }
     232                                }
     233                        }
    167234                }
    168235
     
    206273        }
    207274}
    208 
    209 
    210 /*
    211 #import <Cocoa/Cocoa.h>
    212 
    213 //
    214 #define FACE_ROWMAX     3
    215 #define FACE_COLMAX     11
    216 #define FACE_PATMAX     8
    217 #define FACE_IMGW       128
    218 #define FACE_IMGH       128
    219 #define FACE_IMGSIZE    (NSMakeSize(128,128))
    220 
    221 // ƒ}[ƒJ[ƒrƒbƒgƒ}ƒXƒN
    222 #define FDMARKER_PAGEIN         0x0001
    223 #define FDMARKER_PAGEOUT        0x0002
    224 
    225 //
    226 #define FACE_INFO_TITLE         @"title"
    227 #define FACE_INFO_AUTHOR        @"author"
    228 #define FACE_INFO_VERSION       @"version"
    229 #define FACE_INFO_SITE_URL      @"web site"
    230 
    231 #define FACE_INFO_PARTS         @"parts"
    232 #define FACE_INFO_PATTERN       @"pattern"
    233 #define FACE_INFO_MARKER        @"markers"
    234 #define FACE_INFO_TITLE_PATTERN @"title pattern"
    235 #define FACE_INFO_MARK_PGOUT    @"pagein pattern"
    236 #define FACE_INFO_MARK_PGIN     @"pageout pattern"
    237 
    238 #define FACE_PART_IMAGE         @"filename"
    239 #define FACE_PART_POSX          @"pos x"
    240 #define FACE_PART_POSY          @"pos y"
    241 
    242 typedef struct {
    243     NSString *filename;
    244     NSImage *image;
    245     NSPoint pos;
    246 } PartDef;
    247 
    248 typedef struct {
    249     unsigned count;
    250     int parts[FACE_PATMAX];
    251 } PatternDef;
    252 
    253 
    254 @interface FaceDef : NSObject
    255 {
    256     NSString *packagePath;
    257     NSDictionary *definition;
    258     int partCount;
    259     PartDef *parts;
    260     PatternDef patterns[FACE_ROWMAX][FACE_COLMAX];
    261     int markers[8];
    262     PatternDef titlePattern;
    263 }
    264 
    265 + (NSDictionary*)infoAtPath:(NSString*)path;
    266 
    267 + (id)faceDefWithContentOfFile:(NSString*)path;
    268 
    269 - (id)initWithContentOfFile:(NSString*)path;
    270 
    271 - (NSString*)path;
    272 
    273 - (NSString*)title;
    274 - (NSString*)author;
    275 - (NSString*)version;
    276 - (NSString*)siteURL;
    277 
    278 - (NSImage*)titleImage;
    279 
    280 - (int)partCount;
    281 - (const PartDef*)partOfIndex:(int)index;
    282 - (const PatternDef*)patternOfRow:(int)row col:(int)col;
    283 - (int)patternCountOfRow:(int)row col:(int)col;
    284 - (int)patternNoOfRow:(int)row col:(int)col index:(int)index;
    285 
    286 - (NSImage*)imageOfRow:(int)row col:(int)col marker:(int)marker;
    287 
    288 - (void)drawImageOfRow:(int)row col:(int)col marker:(int)marker atPoint:(NSPoint)pt;
    289 - (void)drawPart:(PartDef*)part atPoint:(NSPoint)point;
    290 
    291 - (void)dumpPattern:(NSString*)path;
    292 
    293 @end
    294 
    295 @implementation FaceDef
    296 
    297 + (NSDictionary*)infoAtPath:(NSString*)path
    298 {
    299     NSDictionary *info;
    300 
    301     info = [NSDictionary dictionaryWithContentsOfFile:
    302         [path stringByAppendingPathComponent:@"faceDef.plist"]];
    303 
    304     return info;
    305 }
    306 
    307 + (id)faceDefWithContentOfFile:(NSString*)path
    308 {
    309     return [[[self alloc] initWithContentOfFile:path] autorelease];
    310 }
    311 
    312 - (id)initWithContentOfFile:(NSString*)path
    313 {
    314     NSDictionary *partDefDict;
    315     NSArray *partArray,*patternArray,*colArray,*elemArray;
    316     NSEnumerator *enumerator;
    317     NSString *imagePath;
    318     NSNumber *value;
    319     int i,count;
    320     int row,col,no;
    321     int maxPartNo;
    322 
    323     [super init];
    324 
    325     NS_DURING
    326         definition = [FaceDef infoAtPath:path];
    327 
    328         if (definition == nil) {
    329             [NSException raise:@"FaceDefInfoLoadException" format:@"failuer loading faceDef.plist"];
    330         }
    331 
    332         [definition retain];
    333 
    334         packagePath = [path retain];
    335 
    336         // ƒp[ƒc’è‹`‚̓ǂݍž‚Ý
    337         partArray = [definition objectForKey:FACE_INFO_PARTS];
    338 
    339         if ([partArray isMemberOfClass:[NSArray class]]) {
    340             [NSException raise:@"FaceDefPartListLoadException" format:@"failed in reading part list."];
    341         }
    342 
    343         parts = calloc([partArray count],sizeof(PartDef));
    344         count = [partArray count];
    345 
    346         for (partCount = 0; partCount < count; partCount++){
    347             partDefDict = [partArray objectAtIndex:partCount];
    348             parts[partCount].filename = [[partDefDict objectForKey:FACE_PART_IMAGE] retain];
    349             parts[partCount].pos.x = [(NSNumber*)[partDefDict objectForKey:FACE_PART_POSX] floatValue];
    350             parts[partCount].pos.y = [(NSNumber*)[partDefDict objectForKey:FACE_PART_POSY] floatValue];
    351             imagePath = [path stringByAppendingPathComponent:parts[partCount].filename];
    352             parts[partCount].image = [[NSImage alloc]initWithContentsOfFile:imagePath];
    353 
    354             if (parts[partCount].image == nil){ // ‰æ‘œ‚ª“ǂݍž‚ß‚È‚©‚Á‚½
    355                 [NSException raise:@"FaceDefPartLoadException"
    356                     format:@"failed in loading of image '%@'",parts[partCount].filename];
    357             }
    358         }
    359 
    360         maxPartNo = count - 1;
    361 
    362         // ƒpƒ^[ƒ“’è‹`‚̓ǂݍž‚Ý
    363         patternArray = [definition objectForKey:FACE_INFO_PATTERN];
    364 
    365         for (row = 0; row < FACE_ROWMAX; row++){
    366             colArray = [patternArray objectAtIndex:row];
    367 
    368             if ([colArray count] != FACE_COLMAX) {
    369                 [NSException raise:@"FaceDefPatternLoadException"
    370                     format:@"number of pattern columns is not 10 at row %d",row];
    371             }
    372 
    373             for (col = 0; col < FACE_COLMAX; col++){
    374                 elemArray = [colArray objectAtIndex:col];
    375                 enumerator = [[colArray objectAtIndex:col] objectEnumerator];
    376                 for (i = 0; i <= FACE_PATMAX && (value = [enumerator nextObject]) != nil; i++){
    377                     no = [value intValue];
    378                     patterns[row][col].parts[i] = no;
    379                     if (0 > no || no > maxPartNo) { // ƒp[ƒc”ԍ†ƒ`ƒFƒbƒN
    380                         [NSException raise:@"FaceDefPatternLoadException"
    381                             format:@"illigal part no %d in patterns[%d,%d,%d]",no,row,col,i];
    382                     }
    383                 }
    384                 patterns[row][col].count = i;
    385             }
    386         }
    387 
    388         // ƒ}[ƒJ[ƒŠƒXƒg‚̓ǂݍž‚Ý
    389         enumerator = [[definition objectForKey:FACE_INFO_MARKER] objectEnumerator];
    390         for (i = 0; i < 8 && (value = [enumerator nextObject]) != nil; i++){
    391             markers[i] = [value intValue];
    392         }
    393 
    394         // ‘ã•\‰æ‘œƒpƒ^[ƒ“‚̓ǂݍž‚Ý
    395         enumerator = [[definition objectForKey:FACE_INFO_TITLE_PATTERN] objectEnumerator];
    396         for (i = 0; i <= FACE_PATMAX && (value = [enumerator nextObject]) != nil; i++){
    397             no = [value intValue];
    398             titlePattern.parts[i] = no;
    399             if (0 > no || no > maxPartNo) { // ƒp[ƒc”ԍ†ƒ`ƒFƒbƒN
    400                 [NSException raise:@"FaceDefPatternLoadException"
    401                     format:@"illigal part no %d in title pattern",no];
    402             }
    403         }
    404         titlePattern.count = i;
    405     NS_HANDLER
    406         NSLog(@"FaceDef load error: %@",localException);
    407         [self dealloc];
    408         self = nil;
    409     NS_ENDHANDLER
    410 
    411     return self;
    412 }
    413 
    414 - (void)dealloc
    415 {
    416     int i;
    417 
    418     [packagePath release];
    419     [definition release];
    420 
    421     if (parts != nil) {
    422         for (i = 0; i < partCount; i++){
    423             [parts[i].filename release];
    424             [parts[i].image release];
    425         }
    426         free(parts);
    427     }
    428 }
    429 
    430 -(NSString*)path
    431 {
    432     return packagePath;
    433 }
    434 
    435 -(NSString*)title
    436 {
    437     NSString *str;
    438     str = [definition objectForKey:@"title"];
    439     return  (str != nil) ? str : @"";
    440 }
    441 
    442 -(NSString*)author
    443 {
    444     NSString *str;
    445     str = [definition objectForKey:@"author"];
    446     return  (str != nil) ? str : @"";
    447 }
    448 
    449 -(NSString*)version
    450 {
    451     NSString *str;
    452     str = [definition objectForKey:@"version"];
    453     return  (str != nil) ? str : @"";
    454 }
    455 
    456 - (NSString*)siteURL
    457 {
    458     NSString *str;
    459     str = [definition objectForKey:@"web site"];
    460     return  (str != nil) ? str : @"";
    461 }
    462 
    463 - (NSImage*)titleImage
    464 {
    465     NSImage *image;
    466     int i;
    467 
    468     image = [[NSImage alloc] initWithSize:FACE_IMGSIZE];
    469     [image lockFocus];
    470 
    471     if (titlePattern.count > 0) {
    472         for (i=0; i<titlePattern.count; i++) {
    473             [self drawPart:&parts[titlePattern.parts[i]] atPoint:NSMakePoint(0,0)];
    474         }
    475     } else {
    476         [self drawImageOfRow:0 col:FACE_COLMAX marker:0 atPoint:NSMakePoint(0,0)];
    477     }
    478 
    479     [image unlockFocus];
    480     return [image autorelease];
    481 }
    482 
    483 - (int)partCount
    484 {
    485     return partCount;
    486 }
    487 
    488 - (const PartDef*)partOfIndex:(int)index
    489 {
    490     if (0 <= index && index < partCount) return &parts[index];
    491     else return nil;
    492 }
    493 
    494 - (const PatternDef*)patternOfRow:(int)row col:(int)col
    495 {
    496     if (0 <= row && row < FACE_ROWMAX
    497      && 0 <= col && col < FACE_COLMAX) return &patterns[row][col];
    498     else return nil;
    499 }
    500 
    501 - (int)patternCountOfRow:(int)row col:(int)col
    502 {
    503     if (0 <= row && row < FACE_ROWMAX
    504      && 0 <= col && col < FACE_COLMAX) return patterns[row][col].count;
    505     else return -1;
    506 }
    507 
    508 - (int)patternNoOfRow:(int)row col:(int)col index:(int)index
    509 {
    510     if (0 <= row && row < FACE_ROWMAX
    511      && 0 <= col && col < FACE_COLMAX
    512      && 0 <= index && index < patterns[row][col].count) return patterns[row][col].parts[index];
    513     else return -1;
    514 }
    515 
    516 - (NSImage*)imageOfRow:(int)row col:(int)col marker:(int)marker
    517 {
    518     NSImage *image;
    519     image = [[NSImage alloc] initWithSize:FACE_IMGSIZE];
    520     [image lockFocus];
    521     [self drawImageOfRow:row col:col marker:marker atPoint:NSMakePoint(0,0)];
    522     [image unlockFocus];
    523     return [image autorelease];
    524 }
    525 
    526 - (void)drawImageOfRow:(int)row col:(int)col marker:(int)marker atPoint:(NSPoint)point
    527 {
    528     int count;
    529     int i;
    530 
    531     count = patterns[row][col].count;
    532     for (i=0; i<count; i++){
    533         [self drawPart:&parts[patterns[row][col].parts[i]] atPoint:point];
    534     };
    535 
    536     if (marker != 0) {
    537         for (i=0; i<8; i++) {
    538             if (marker & (1<<i)) {
    539                 [self drawPart:&parts[markers[i]] atPoint:point];
    540             }
    541         }
    542     }
    543 }
    544 
    545 - (void)drawPart:(PartDef*)part atPoint:(NSPoint)point
    546 {
    547     point.x += part->pos.x;
    548     point.y += part->pos.y;
    549     [part->image compositeToPoint:point operation:NSCompositeSourceOver];
    550 }
    551 
    552 -(void)dumpPattern:(NSString*)path;
    553 {
    554     NSImage *img;
    555     NSSize imgSize;
    556     NSPoint pos;
    557     float offset;
    558     int i,j,rows;
    559     NSMutableDictionary *attr;
    560     NSString *str;
    561 
    562     rows = partCount / FACE_COLMAX + 1;
    563     offset = rows * FACE_IMGW + 10;
    564     imgSize.width = FACE_IMGW * FACE_COLMAX;
    565     imgSize.height = FACE_IMGH * FACE_ROWMAX + offset + 14;
    566 
    567     img = [[NSImage alloc] initWithSize:imgSize];
    568     if (img == nil) {
    569         NSLog(@"failure dump pattern!");
    570         return;
    571     }
    572 
    573     [img lockFocus];
    574     [[NSColor whiteColor] set];
    575     NSRectFill(NSMakeRect(0,0,imgSize.width,imgSize.height));
    576 
    577     [[NSColor blackColor] set];
    578     NSRectFill(NSMakeRect(0,offset-6,imgSize.width,2));
    579 
    580     attr = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
    581                 [NSFont systemFontOfSize:14.0], NSFontAttributeName,
    582                 [NSColor blackColor], NSForegroundColorAttributeName,
    583                 nil];
    584 
    585     for (i = 0; i <= partCount; i++) {
    586         pos.x = (i % FACE_COLMAX) * FACE_IMGW;
    587         pos.y = (rows-1 - i / FACE_COLMAX) * FACE_IMGH;
    588         [self drawPart:&parts[i] atPoint:pos];
    589 
    590         str = [NSString stringWithFormat:@"%d",i];
    591         pos.x = (i % FACE_COLMAX) * FACE_IMGW;
    592         pos.y = (rows-1 - i / FACE_COLMAX) * FACE_IMGH + FACE_IMGH - 12;
    593         [str drawAtPoint:pos withAttributes:attr];
    594     }
    595 
    596     for (i = 0; i < FACE_ROWMAX; i++) {
    597         pos.y = (FACE_ROWMAX-1 - i) * FACE_IMGH + offset;
    598         for (j=0; j<FACE_COLMAX; j++) {
    599             pos.x = j * FACE_IMGW;
    600             [self drawImageOfRow:i col:j marker:0 atPoint:pos];
    601         }
    602     }
    603 
    604     pos.y = imgSize.height - 14;
    605     for (i = 0; i < FACE_COLMAX-1; i++) {
    606         str = [NSString stringWithFormat:@"%d-%d%%",i*10,(i+1)*10-1];
    607         pos.x = i * FACE_IMGW;
    608         [str drawAtPoint:pos withAttributes:attr];
    609     }
    610     str = [NSString stringWithFormat:@"%d%%",100];
    611     pos.x = (FACE_COLMAX-1) * FACE_IMGW;
    612     [str drawAtPoint:pos withAttributes:attr];
    613 
    614     [img unlockFocus];
    615 
    616     [[img TIFFRepresentation] writeToFile:path atomically:NO];
    617     [img release];
    618 }
    619 
    620 @end
    621 
    622 */
Note: See TracChangeset for help on using the changeset viewer.