导出的PNG模糊不清

时间:2012-11-10 22:11:16

标签: objective-c cocoa xcode4.5

我正在尝试生成一个qr并将其导出到PNG但是,每当我这样做时,它会将其导出为模糊图像。我不知道我能做些什么来使它不模糊。

有两种情况发生:

  1. 在预览窗口中
  2. 导出文件时
  3. 这是我正在使用的代码。任何帮助或建议都会非常感激,因为我还不熟悉该语言,并试图解决问题。

    我的代码来了:

    - (NSImage *)scaleImageTo:(NSImage *)inputImage size:(NSSize)newSize
    {
        NSImage *cropped = [[NSImage alloc] initWithSize:NSMakeSize(newSize.width, newSize.height)];
    
         [cropped lockFocus];
         [inputImage drawInRect:NSMakeRect(0,0,cropped.size.width,cropped.size.height)
                    fromRect:NSMakeRect(0,0,inputImage.size.width,inputImage.size.height)
                   operation:NSCompositeCopy
                    fraction:1.0];
         [cropped unlockFocus];
    
    
         NSRect rect = NSMakeRect(0, 0, cropped.size.width, cropped.size.height);
    
         CIImage* ciImage1 = [[CIImage alloc] initWithData:[cropped TIFFRepresentation]];
    
    
        [[NSGraphicsContext currentContext] setShouldAntialias: NO];
    
         NSImage *buffer2 = [[NSImage alloc] initWithSize:NSMakeSize([cropped size].width , [cropped size].height)];
    
        [buffer2 lockFocus];
        CIFilter* filter2 = [CIFilter filterWithName:@"CIMaskToAlpha"];
        [filter2 setValue:ciImage1 forKey:@"inputImage"];
    
        CIImage* output2 = [filter2 valueForKey:@"outputImage"];
    
        [output2 drawAtPoint:NSZeroPoint fromRect:rect operation:NSCompositeSourceOver fraction:1.0];
    
    
        //background
        [[_backgroundColorSelector color] set];
        NSRectFillUsingOperation(rect, NSCompositeSourceAtop);
        //foreground
        [[_foregroundColorSelector color] set];
        NSRectFillUsingOperation(rect, NSCompositeDestinationAtop);
    
        [buffer2 unlockFocus];
        return buffer2;
    }
    - (void)writeImageAt:(NSImage *)img path:(NSString *)strPath
    {
        //create a NSBitmapImageRep
         NSBitmapImageRep *bmpImageRep = [[NSBitmapImageRep alloc]initWithData:[img TIFFRepresentation]];
         //add the NSBitmapImage to the representation list of the target
         [img addRepresentation:bmpImageRep];
    
         //get the data from the representation
         NSData *data = [bmpImageRep representationUsingType: NSPNGFileType
                                                 properties: nil];
        [data writeToFile:strPath atomically:YES];
    }
    - (void)savePNGAt:(NSImage *)img path:(NSString *)strPath
    {
        NSString * qrWidth = [_qrWidth stringValue];
        NSString * qrHeight = [_qrHeight stringValue];
    
        if (qrHeight != nil && ![qrWidth isEqualToString:@""] && qrWidth != nil && ![qrHeight isEqualToString:@""]) {
            NSSize newSize = NSMakeSize([qrWidth floatValue], [qrHeight floatValue]);
            img = [self scaleImageTo:img size:newSize];
            [self writeImageAt:img path:strPath];
        }
        else
        {
            img = [self changeImageColor:img];
            [self writeImageAt:img path:strPath];
        }
    }
    

1 个答案:

答案 0 :(得分:0)

几乎可以肯定,当图像缩放img = [self scaleImageTo:img size:newSize];时,会引入模糊,而不是这样做,您应该以正确的尺寸重现QR图像以进行显示/打印/导出等。