Необходимо сохранить как .png, но я получаю .jpg - PullRequest
0 голосов
/ 14 июля 2011

Я сохраняю фотоальбом, хочу, чтобы файл был .png, но он сохраняется как .jpeg? Можно ли даже сохранить .png в фотоальбом?

вот мой код:

CGContextRef MyCreateBitmapContext (int pixelsWide,int pixelsHigh)
{
    CGContextRef context = NULL;
    //CGColorSpaceRef colorSpace;
    void * bitmapData;
    int bitmapByteCount;
    int bitmapBytesPerRow;
    bitmapBytesPerRow = (pixelsWide * 4);
    bitmapByteCount = (bitmapBytesPerRow * pixelsHigh);
    //colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    bitmapData = malloc( bitmapByteCount );

    if (bitmapData == NULL)
    {
        fprintf (stderr, "Memory not allocated!");
        return NULL;
    }
    context = CGBitmapContextCreate (bitmapData,
                                     pixelsWide,
                                     pixelsHigh,
                                     8,//bits per component
                                     bitmapBytesPerRow,
                                     colorSpace,
                                     kCGImageAlphaPremultipliedLast);

    if (context== NULL)
    {
        free (bitmapData);
        fprintf (stderr, "Context not created!");
        return NULL;
    }
    CGColorSpaceRelease( colorSpace );
    return context;
}

и

- (IBAction)save:(id)sender{

    myBitmapContext = MyCreateBitmapContext (400, 300);

    // ********** Your drawing code here **********

    CGContextSetRGBFillColor (myBitmapContext, 1, 0, 0, 1);
    CGContextFillRect (myBitmapContext, CGRectMake (0, 0, 400, 300 ));


    // ********** Your drawing code here **********


    CGImageRef imageRef = CGBitmapContextCreateImage(myBitmapContext);
    UIImage * image = [[UIImage alloc] initWithCGImage:imageRef];

    //NSData* imdata = UIImagePNGRepresentation ( image );// get PNG representation

    //UIImage* im2 = [UIImage imageWithData:imdata]; // wrap UIImage around PNG representation

    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); // save to photo album

    [image release];

    CGImageRelease(imageRef);
    CGContextRelease(myBitmapContext);
}

большое спасибо за любые идеи

1 Ответ

3 голосов
/ 14 июля 2011

UIImage не имеет ассоциированного типа файла.Ваш код, который принимает UIImage, извлекает данные PNG и создает новый UIImage - это просто потраченные впустую циклы ЦП.Полученное изображение должно быть идентичным оригиналу.UIImageWriteToSavedPhotosAlbum() сохраняет JPEG, потому что предполагается, что фотографии, сохраняемые в фотоальбоме, это, ну, фотографии.И JPEG является предпочтительным форматом для фотографий.

Возможно, вы захотите подать отчет об ошибке , запрашивающий механизм для сохранения PNG в альбом фотографий.

...