मेरे ऐप में उपयोगकर्ता UIImagePickerViewController का उपयोग करके एक छवि चुनता है या एक तस्वीर लेता है। एक बार छवि का चयन करने के बाद मैं एक वर्ग UIImageView (90x90) पर अपना थंबनेल प्रदर्शित करना चाहता हूं।UIImagePickerViewController छवि से स्क्वायर थंबनेल छवि
मैं थंबनेल बनाने के लिए Apple's code का उपयोग कर रहा हूं। समस्या यह है कि थंबनेल वर्ग नहीं है, फ़ंक्शन, सेट केसीजीआईमेजसोर्स थंबनेल मैक्स पिक्सेल आकार कुंजी 9 0 के बाद, केवल छवि की ऊंचाई का आकार बदलने लगता है, और जहां तक मुझे पता है कि केसीजीआईमेजसोर्स थंबनेलमैक्स पिक्सेल आकार कुंजी थंबनेल की ऊंचाई और चौड़ाई को सेट करने के लिए ज़िम्मेदार होना चाहिए।
यहाँ मेरी कोड की एक झलक है:
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
NSData *imageData = UIImageJPEGRepresentation (image, 0.5);
// My image view is 90x90
UIImage *thumbImage = MyCreateThumbnailImageFromData(imageData, 90);
[myImageView setImage:thumbImage];
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
UIImage* MyCreateThumbnailImageFromData (NSData * data, int imageSize) {
CGImageRef myThumbnailImage = NULL;
CGImageSourceRef myImageSource;
CFDictionaryRef myOptions = NULL;
CFStringRef myKeys[3];
CFTypeRef myValues[3];
CFNumberRef thumbnailSize;
// Create an image source from NSData; no options.
myImageSource = CGImageSourceCreateWithData((__bridge CFDataRef)data,
NULL);
// Make sure the image source exists before continuing.
if (myImageSource == NULL){
fprintf(stderr, "Image source is NULL.");
return NULL;
}
// Package the integer as a CFNumber object. Using CFTypes allows you
// to more easily create the options dictionary later.
thumbnailSize = CFNumberCreate(NULL, kCFNumberIntType, &imageSize);
// Set up the thumbnail options.
myKeys[0] = kCGImageSourceCreateThumbnailWithTransform;
myValues[0] = (CFTypeRef)kCFBooleanTrue;
myKeys[1] = kCGImageSourceCreateThumbnailFromImageIfAbsent;
myValues[1] = (CFTypeRef)kCFBooleanTrue;
myKeys[2] = kCGImageSourceThumbnailMaxPixelSize;
myValues[2] = thumbnailSize;
myOptions = CFDictionaryCreate(NULL, (const void **) myKeys,
(const void **) myValues, 2,
&kCFTypeDictionaryKeyCallBacks,
& kCFTypeDictionaryValueCallBacks);
// Create the thumbnail image using the specified options.
myThumbnailImage = CGImageSourceCreateThumbnailAtIndex(myImageSource,
0,
myOptions);
UIImage* scaled = [UIImage imageWithCGImage:myThumbnailImage];
// Release the options dictionary and the image source
// when you no longer need them.
CFRelease(thumbnailSize);
CFRelease(myOptions);
CFRelease(myImageSource);
// Make sure the thumbnail image exists before continuing.
if (myThumbnailImage == NULL) {
fprintf(stderr, "Thumbnail image not created from image source.");
return NULL;
}
return scaled;
}
और यह कैसे मेरी छवि को देखने instantiated है:
myImageView = [[UIImageView alloc] init];
imageView.contentMode = UIViewContentModeScaleAspectFit;
CGRect rect = imageView.frame;
rect.size.height = 90;
rect.size.width = 90;
imageView.frame = rect;
[imageView setUserInteractionEnabled:YES];
मैं imageView.contentMode = UIViewContentModeScaleAspectFit;
निर्धारित नहीं करते हैं थम्बनेल, विकृत हो जाएगा के बाद से 90 पिक्सेल की ऊंचाई के साथ मेरी मूल छवि का सिर्फ एक संस्करण है।
तो, मेरा थंबनेल क्यों नहीं है?
यहाँ आप दृश्य का आकार बदलने के लिए और भी इतना है कि अनुपात में पहलू अनुपात और अन्य आनुपातिक भरण जोड़ सकते हैं:
नोट - आईओएस का कोई ज्ञान के साथ एक मेटा उपयोगकर्ता दूर संपादित कुछ सुपर आसान कोड नीचे चालाक के जवाब से। यदि आप वास्तव में प्रोग्रामिंग कर रहे हैं और वास्तव में एक उपयोगी उत्तर चाहते हैं और वास्तव में चालावर (शानदार) विचारों का उपयोग करना चाहते हैं, तो बस नीचे दिए गए "संपादित" बटन पर क्लिक करें, आप इतिहास देखेंगे और ऐप स्टोर में कट, पेस्ट और भेज सकते हैं:) – Fattie
@JoeBlow मुझे चालाक त्रुटि के उत्तर के [संपादित इतिहास] (http://stackoverflow.com/posts/17884863/revisions) में कोई भी हटाया गया कोड नहीं दिख रहा है। – cpburnz
http://stackoverflow.com/posts/17884863/revisions rev "5" – Fattie