将UIImage导出为stretchchableImage会导出图像,并在Image上绘制水平和垂直线

时间:2012-06-10 05:54:45

标签: ios uiimage

我尝试构建一个应用程序,它将背景图像与文本气泡结合在一起。我将文本气泡初始化为可伸缩的UIImages,并定义了leftCapWidth和topCapHeight。在应用程序本身显示文本气泡时,一切正常,文本气泡正常显示,而不会在它们上面绘制任何线条。

然而,当我尝试导出图像时,我使用UIGraphicsBeginImageContext()函数将背景图像与文本气泡结合在一起我发现文本气泡有一条垂直线和一条水平线。它们似乎是在leftCapWidth和topCapHeight定义的点处绘制的。以前有人遇到过这样的问题吗?

我在应用程序中渲染图像并导出图像时看到的唯一区别是我在导出时使用UIImageViews来保存可伸缩图像我只是使用UIImages。

将气泡图像与背景图像组合的代码:

UIGraphicsBeginImageContext(mainImage.size);

[fullSectionImage drawInRect:CGRectMake(0, 0, mainImage.size.width, mainImage.size.height) blendMode:kCGBlendModeNormal alpha:1.0 ];

UIImage *bubbleImage = [UIImage imageNamed:@"bubble1.png"];
stretchableImage = [bubbleImage stretchableImageWithLeftCapWidth:40 topCapHeight:15];
[stretchableImage drawInRect:CGRectMake(originX,originY,width,height) blendMode: kCGBlendModeNormal alpha:1.0 ];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();   
UIImageWriteToSavedPhotosAlbum(newImage, nil,nil,nil);

在应用中使用背景图片显示相同气泡的代码:

UIImageView *bubbleImageView;
UIImage *bubbleImage = [UIImage imageNamed:@"bubble1.png"];
stretchableImage = [bubbleImage stretchableImageWithLeftCapWidth:40 topCapHeight:15];
bubbleImageView = [[UIImageView alloc] initWithImage:stretchableImage];
[bubbleImageView setFrame:CGRectMake(0,0,width,height)];
bubbleImageView.autoresizingMask = YES;
[self addSubview:bubbleImageView];

1 个答案:

答案 0 :(得分:3)

为了解决这个问题,stretchableImage应该使用drawInRect方法,并将所有整数值作为争论。

[stretchableImage drawInRect:CGRectMake(originX,originY,width,height) blendMode: kCGBlendModeNormal alpha:1.0 ];

originX,originY,width,height在这种情况下需要是整数值。这解决了我的问题。