5

UIImage私はそれを変換してそのデータを投稿するリクエストを受け取るメソッドを持っていますNSData.iOS 6で動作しますが、iOS 7で試してみると、画像は透明な背景を失います.

これは私が今まで試したことです:

-(void)post:(UIImage *)firm name:
{

    int x = 350;

    NSData *imageData = UIImagePNGRepresentation(firm);
    UIImage *image=[UIImage imageWithData:imageData];
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, x, 40, 50)];
    imageView.backgroundColor = [UIColor clearColor];
    imageView.image = image;


    NSData *imageData2 = [NSData dataWithData:UIImagePNGRepresentation(firm)];
    UIImage *image2=[UIImage imageWithData:imageData2];
    UIImageView *imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(160, x, 40, 50)];
    imageView2.image = image2;

    UIImageView *imageView3 = [[UIImageView alloc]initWithFrame:CGRectMake(110, x, 40, 50)];
    imageView3.image = firm;

    UIImage * img = [UIImage imageWithData:UIImagePNGRepresentation(image)];
    UIImageView *imageView4 = [[UIImageView alloc]initWithFrame:CGRectMake(210, x, 40, 50)];
    imageView4.image = img;

    [self.view addSubview:imageView];
    [self.view addSubview:imageView2];
    [self.view addSubview:imageView3];
    [self.view addSubview:imageView4];

上では、imageView3背景なしで取得したとおりに表示しています(ここまではすべて問題ありません)が、に変換しNSDataて元に戻すとUIImage、透明度が失われます。

iOS 7 で実行されるコード

ここに画像の説明を入力

iOS 6 以下で実行されている同じコードは完璧に動作します!!

ここに画像の説明を入力

私はGithubの例で私の問題の例を作成しました

4

1 に答える 1

2

UIImagePNGRepresentationiOS7で透明度のある画像に使用すると、透明度が保持されます。

たとえば、次の画像を使用します。

脳卒中

あなたのコードを使用してそれをレンダリングすると、次のようになります。

ここに画像の説明を入力

おそらく、あなたが始めたイメージには何かがあるのでしょう。


この問題は、イメージを作成した OpenGLES コードに起因しているようです。hereで説明したように、使用する必要があるようです

glClearColor(0.0, 0.0, 0.0, 0.0);

それ以外の

glClearColor(1.0, 1.0, 1.0, 0.0);

kCGImageAlphaPremultipliedLastの値も使用しましたCGBitmapInfo

これらすべてを実行すると、CGImageCreateWithMaskingColors不要な呼び出しがレンダリングされ、結果のイメージは、呼び出し時にアルファ チャネルが正しく保持されているように見えますUIImagePNGRepresentation

于 2013-09-24T14:13:16.343 に答える