objective c - kCAFilterNearest maginifcation filter (UIImageView) -
i using qrencoder library found here: https://github.com/jverkoey/objqrencoder
basically, looked @ example code author, , when creates qrcode comes out no pixelation. image library provides 33 x 33 pixels, uses kcafilternearest magnify , make clear (no pixilation). here code:
uiimage* image = [qrencoder encode:@"http://www.google.com/"]; uiimageview* imageview = [[uiimageview alloc] initwithimage:image]; cgfloat qrsize = self.view.bounds.size.width - kpadding * 2; imageview.frame = cgrectmake(kpadding, (self.view.bounds.size.height - qrsize) / 2, qrsize, qrsize); [imageview layer].magnificationfilter = kcafilternearest; [self.view addsubview:imageview];
i have uiimageview in xib, , setting it's image this:
[[template imagevqrcode] setimage:[qrencoder encode:ticketnum]]; [[[template imagevqrcode] layer] setmagnificationfilter:kcafilternearest];
but qrcode blurry. in example, comes out crystal clear. doing wrong? thanks!
update:i found out problem isn't scaling or kcaffilternearest. has generating png image view. here's how looks on deive vs how looks when save uiview png representation (notice qrcodes quality):
update 2: how generating png file uiview:
uigraphicsbeginimagecontextwithoptions([[template view] bounds].size, yes, 0.0); [[[template view] layer] renderincontext:uigraphicsgetcurrentcontext()]; uiimage *viewimage = uigraphicsgetimagefromcurrentimagecontext(); uigraphicsendimagecontext(); [uiimagepngrepresentation(viewimage) writetofile:plistpath atomically:yes];
i have used below function editing image.
- (uiimage *)resizedimage:(cgsize)newsize interpolationquality:(cginterpolationquality)quality { bool drawtransposed; switch (self.imageorientation) { case uiimageorientationleft: case uiimageorientationleftmirrored: case uiimageorientationright: case uiimageorientationrightmirrored: drawtransposed = yes; break; default: drawtransposed = no; } return [self resizedimage:newsize transform:[self transformfororientation:newsize] drawtransposed:drawtransposed interpolationquality:quality]; } - (uiimage *)resizedimage:(cgsize)newsize transform:(cgaffinetransform)transform drawtransposed:(bool)transpose interpolationquality:(cginterpolationquality)quality { cgrect newrect = cgrectintegral(cgrectmake(0, 0, newsize.width, newsize.height)); cgrect transposedrect = cgrectmake(0, 0, newrect.size.height, newrect.size.width); cgimageref imageref = self.cgimage; // build context that's same dimensions new size cgbitmapinfo bitmapinfo = cgimagegetbitmapinfo(imageref); if((bitmapinfo == kcgimagealphalast) || (bitmapinfo == kcgimagealphanone)) bitmapinfo = kcgimagealphanoneskiplast; cgcontextref bitmap = cgbitmapcontextcreate(null, newrect.size.width, newrect.size.height, cgimagegetbitspercomponent(imageref), 0, cgimagegetcolorspace(imageref), bitmapinfo); // rotate and/or flip image if required orientation cgcontextconcatctm(bitmap, transform); // set quality level use when rescaling cgcontextsetinterpolationquality(bitmap, quality); // draw context; scales image cgcontextdrawimage(bitmap, transpose ? transposedrect : newrect, imageref); // resized image context , uiimage cgimageref newimageref = cgbitmapcontextcreateimage(bitmap); uiimage *newimage = [uiimage imagewithcgimage:newimageref]; // clean cgcontextrelease(bitmap); cgimagerelease(newimageref); return newimage; } uiimagewritetosavedphotosalbum([image resizedimage:cgsizemake(300, 300) interpolationquality:kcginterpolationnone], nil, nil, nil);
please find below image , let me know if need help.
Comments
Post a Comment