我想在iOS中将文本渲染为纹理,所以我可以使用OpenGL绘制它。我正在使用此代码:
CGSize textSize = [m_string sizeWithAttributes: m_attribs];
CGSize frameSize = CGSizeMake(NextPowerOf2((NSInteger)(MAX(textSize.width, textSize.height))), NextPowerOf2((NSInteger)textSize.height));
UIGraphicsBeginImageContextWithOptions(frameSize, NO /*opaque*/ , 1.0 /*scale*/);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSetTextDrawingMode(currentContext, kCGTextFillStroke);
CGContextSetLineWidth(currentContext, 1);
[m_string drawAtPoint:CGPointMake (0, 0) withAttributes:m_attribs];
答案 0 :(得分:1)
这看起来像解决问题但无论如何......
您正在使用iOS我建议您使用UI组件UILabel
。然后将所有参数设置为您想要的标签,包括换行模式,行数,属性文本,字体......您可以调用sizeToFit
以获得标签的最小可能尺寸。您不会将标签添加到任何其他视图,而是从视图中创建UIImage
(您在SO上有相当多的答案)。获得图像后,您可以简单地将原始RGBA数据复制到纹理(再次加载有关如何从UIImage
获取RGBA数据的答案)。就是这样。那么你可能想要检查视网膜x2和x3设备的内容比例,或者通过相应的因素增加字体大小来手动完成。
这个程序可能看起来像是一种解决方法,可能比使用核心图形要慢得多,但事实却远非如此:
CGImage
相同的RGBA缓冲区(UIImage
仅包装它)UIImage
,因此操作过程基本相同。因此,这个程序可能会消耗更多的资源(实际上并不多,甚至可能更少)但是在绘制文本时你会获得无限的权力。
答案 1 :(得分:0)
好吧,最终我渲染到了一个大小加倍的纹理并将其转换为UIImage,其比例为2.通过利用视网膜显示。
UIImage* pTheImage = UIGraphicsGetImageFromCurrentImageContext();
UIImage* pScaledImage = [UIImage imageWithCGImage:pTheImage.CGImage scale:2 orientation:pTheImage.imageOrientation];
我只是将它用作openGL绘图的纹理。