0

iDeviceのカメラから取得した画像、またはフォトライブラリから選択した画像にテキストを書き込んでいますが、画像の幅/高さに応じてフォントサイズを調整する必要があります。これが私の現在のコードです:UIGraphicsBeginImageContext(img.size);

CGRect aRectangle = CGRectMake(0,0, img.size.width, img.size.height);
[img drawInRect:aRectangle];

[[UIColor whiteColor] set];           // set text color
NSInteger fontSize = 45;
UIFont *font = [UIFont systemFontOfSize:fontSize];// set text font

[ text drawInRect : aRectangle                      // render the text
         withFont : font
    lineBreakMode : UILineBreakModeTailTruncation  // clip overflow from end of last line
        alignment : UITextAlignmentCenter ];

UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext();   // extract the image
UIGraphicsEndImageContext();     // clean  up the context.
return theImage;</i>
4

1 に答える 1

0

あなたはこのようなものが欲しいです。画像の半分のサイズの長方形を作成し、バイナリ検索を使用して必要なフォントサイズにズームインします。

//---- initial data
CGSize szMax = CGSizeMake(<imgWidth> / 2, <imgHeight> / 2);
CGFloat fMin = 2;      //-- the smallest size font we want
CGFloat fMax = 100;    //-- the largest size font we want
CGFloat fMid;          //-- the middle of min and max

while ((fMax - fMin) >= 1.0)    //-- repeat until the sizes converge
{
    fMid = (fMin + fMax) / 2.0;    //-- compute mid-point

    UIFont *pfnt = [UIFont systemFontOfSize: fMid];    //-- create middle-sized font

    //---- compute the size of the text using the mid-sized font
    CGSize szStr = [pStr sizeWithFont: pfnt constrainedToSize: szMax lineBreakMode: UILineBreakModeWordWrap];

    if (szStr.height > szMax.height)
        fMax = fMid;                //-- text too tall, set max to mid-point
    else               
        fMin = fMid;                //-- text too short, set min to mid-point
}
//---- 'fMid' is the size you want.
于 2012-09-20T02:54:31.567 に答える