Tag: 核心graphics

从CGBitmapContextGetData中获取图像

所以我有一个CGBitmapContext ,我用这个在touchlocation获取像素 unsigned char* data = CGBitmapContextGetData (offscreenBuffer); if (data != NULL) { offset = 4*((self.bounds.size.width*round(coord.y))+round(coord.x)); int alpha = data[offset]; int red = data[offset+1]; int green = data[offset+2]; int blue = data[offset+3]; } 然后我改变像下面的像素颜色。 data[offset]=255; data[offset+1]=255; data[offset+2]=0; data[offset+3]=0; 我的问题是如何从修改的像素获取CGImage,以便我可以更新我的CGBitmapContext ? 任何帮助将不胜感激,谢谢!

绘图时将变换应用于UIImage

试图将可缩放或旋转的较小图像叠加在较大的图像上: + (UIImage*)addToImage:(UIImage *)baseImage newImage:(UIImage*)newImage atPoint:(CGPoint)point transform:(CGAffineTransform)transform { UIGraphicsBeginImageContext(baseImage.size); [baseImage drawInRect:CGRectMake(0, 0, baseImage.size.width, baseImage.size.height)]; [newImage drawAtPoint:point]; //How would I apply the transform? UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return result; } 在这种情况下,我将如何将CGAffineTransform应用于newImage?

如何在iOS上读取 – 修改 – 写入PDF(CGPDFDocument)?

我正在尝试修改iOS上现有PDF的PDF元数据(标题,作者等)。 虽然很容易find用于PDFparsing和从头开始创buildPDF的示例代码,但是将现有的PDF转储到新文件似乎并不是一个简单的方法 – 只需轻微修改即可。 更具体地说,如何获得读取PDF时获得的信息大致如下: CGPDFDocumentRef myPDF = CGPDFDocumentCreateWithURL((CFURLRef)urlOfInputPDF); CGPDFDictionaryRef myPDFDict=CGPDFDocumentGetInfo(myPDF); 到新的PDF中,我将大致这样创build: CGRect pageRect; CFMutableDictionaryRef myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File")); CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name")); pdfContext = CGPDFContextCreateWithURL (urlOfOutputPDF, &pageRect, myDictionary); 显然,字典types不匹配,并且以这种方式创build的输出是与页面(不是文档)相关的。 任何想法,我怎么可以将整个CGPDFDocumentRef复制到一个新的文件? 如何使它变得可变,所以我可以在保存之前修改元数据?

iOS:如何创build和绘制(并保存)比屏幕更大的图像?

我们正在创build一个iOS照片应用程序。 在这样做的时候,我们必须创build大小约2500x1600px的dynamic大小的图片。 一旦这个图像被创build,我们想要在较大的图像上合理快速地绘制较小的图像。 我们可以看到的问题是,获取大于屏幕分辨率的上下文是不可能的。 调用不会崩溃,但会返回一个无上下文。 怎么能这样一个看似简单的任务呢? 其次,一旦创build了这个环境,在大环境中的某个特定位置上画一个小图像的最快方法是什么? 编辑: 我们find了解决scheme。 CGBitmapContextCreate返回nil,因为宽度和高度参数被设置为浮点数,而不是int。 有时候解决scheme就在你的面前,而你却盲目地看不到它。 希望这个答案可以帮助其他人以某种方式有相同的问题。

核心文本在cocoa应用程序

我有下面的示例代码,它适用于iPhone。 它绘制文本“Hello World!” 在屏幕上使用核心文本。 将此代码放入NSView中的cocoa项目中会产生不同的结果。 字体大小缩放得更大,字母相互重叠。 如何在cocoa应用程序中绘制相同的文字? – (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSaveGState(context); CFStringRef font_name = CFStringCreateWithCString(NULL, "Courier", kCFStringEncodingMacRoman); CTFontRef font = CTFontCreateWithName(font_name, 36.0, NULL); CFStringRef keys[] = { kCTFontAttributeName }; CFTypeRef values[] = { font }; CFDictionaryRef font_attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)&keys, (const void **)&values, sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFRelease(font_name); […]

书法绘图IOS Coregraphics

我正在寻找一些标记为红色的标记,但不知道是否可以完成。 它看起来像使用书法笔标记。 按照“Andrey”的回答试用下面的代码,在绘图时我得到了下面的输出和空格。 刷图像可以在这里find使用的是 进一步修改代码,我发现仍然无法得到预期的结果。 在这里,我试图填补当前点和下一点之间存在的path。 – (void)drawRect:(CGRect)rect { // Drawing code CGFloat w=5.0; CGFloat h=2.0; CGContextRef context=UIGraphicsGetCurrentContext(); CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor); for(int i=0;i<self.positions.count;i++){ CGPoint point=[[self.positions objectAtIndex:i] CGPointValue]; CGFloat x=point.x-(w/2.0); CGFloat y=point.y-(h/2.0); CGContextFillRect(context, CGRectMake(x, y, w, h)); if(i+1<self.positions.count){ CGPoint nextPoint=[[self.positions objectAtIndex:(i+1)] CGPointValue]; CGMutablePathRef myPath=CGPathCreateMutable(); CGPathMoveToPoint(myPath, NULL, x, y); CGFloat x1=nextPoint.x-(w/2.0); CGFloat y1=nextPoint.y-(h/2.0); CGPathAddLineToPoint(myPath, NULL, x1, y1); […]

如何将屏幕上绘制的形状与一个字母进行比较?

我想检查绘制的形状匹配字母表中的一个字母。 这是一个学习的孩子应用程序。 当任何一个绘制形状,那么我怎么能检测到这是一个正确的信?

在iOS中以编程方式创build渐变图像

我正在尝试处理一些来自设备相机的imagedata。 为了理解CGImage结构,我使用了一个缓冲区来创build一个不适合我的图像(我知道我不应该在Obj-C代码中使用C代码,这只是为了理解)。 代码如下: int *outBuf = malloc(sizeof(int) * width * height); for (int i = 0; i < width * height;i ++) { outBuf[i] = (((float)i) / ((float) width * height)) * 255.f; } CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef ctx = CGBitmapContextCreate(outBuf, width, height, 8, width * 4, colorSpace, kCGImageAlphaNone); CGImageRef img = CGBitmapContextCreateImage(ctx); CFRelease(ref); […]

在iOS上,CALayer位图(CGImage对象)如何显示在graphics卡上?

在iOS上,我能够创build3个CGImage对象,并以60fps的CADisplayLink使用CADisplayLink self.view.layer.contents = (__bridge id) imageArray[counter++ % 3]; 在ViewController ,每一次,一个图像被设置为视图的CALayer contents ,这是一个位图。 而这一切都可以改变屏幕显示。 屏幕将以60fps循环播放这3张图片。 没有UIView的drawRect ,没有CALayer的display , drawInContext或者CALayer的委托drawLayerInContext 。 它所做的只是更改CALayer的contents 。 我也尝试添加一个较小的子层self.view.layer ,并设置该子层的contents 。 这个子图层将循环通过这3个图像。 所以这与以前甚至在苹果公司(甚至在King's Quest III时代,这是DOSvideo游戏,其中有一个位图,屏幕只是不断显示位图是什么)非常相似。 除了这个时候,它不是一个位图,而是一个树或一个链接的位图列表,并且显卡不断使用画家模型将这些位图(位置和不透明度)绘制到主屏幕上。 所以看来, drawRect ,CALayer,一切都是为了达到最终目的而devise的。 这是如何工作的? 显卡是否采用位图或位图树的有序列表? (然后不断地显示它们,为了简化,我们不考虑CA框架中的隐式animation)在graphics卡处理层中究竟发生了什么? (实际上,这种方法在iOS,Mac OS X和PC上几乎相同?) (这个问题旨在了解我们的graphics编程实际上是如何在现代graphics卡中呈现的,例如,如果我们需要了解UIView和CALayer的工作方式,或者直接使用CALayer的位图,我们需要了解graphics架构。

如何获得cocoa的形象作者

我不明白为什么metaDic总是空的。 有一个代码。 CFDataRef dataRef = CGDataProviderCopyData(CGImageGetDataProvider(img.CGImage)); //(UIImage *img) CGImageSourceRef mySourceRef = CGImageSourceCreateWithData(dataRef, NULL); NSDictionary *metaDic = (NSDictionary *) CGImageSourceCopyPropertiesAtIndex(mySourceRef,0,NULL); NSDictionary *tiffDic = (NSDictionary *)[metaDic objectForKey:(NSString *)kCGImagePropertyTIFFDictionary]; NSString *AuthorName = [tiffDic objectForKey:(NSString *)kCGImagePropertyTIFFArtist]; 我做了一些变体获取图片。 在这里我发现了 获取图片信息的一种方法 – 我需要从网站上获得它,并在那里得到: // NSURL *UrlPath – path of picture image.jpg from web site NSData *dataImg = [NSData dataWithContentsOfURL:UrlPath]; CGImageSourceRef mySource […]