2012-07-15 12 views
6

से एक छवि के लिए रेटिना डिस्प्ले मेरे पास कुछ छवियां हैं जिन्हें मुझे वेब से प्राप्त करने की आवश्यकता है। बस एक यूआरएल से डेटा का उपयोग कर।
उन्हें रेटिना डिस्प्ले पर सही ढंग से दिखाना होगा।
जब मुझे वेब से छवियां मिलती हैं, तब भी वे पिक्सलेटेड दिखती हैं। मुझे छवियों के पैमाने को रेटिना डिस्प्ले (2.0) पर सेट करने की आवश्यकता है, लेकिन मुझे कुछ याद आना चाहिए। यहां तक ​​कि मैंने अभी तक क्या किया है।यूआरएल

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:@"http://www.msdomains.com/tmp/test.png"]; 

CGRect labelFrame = CGRectMake(0,0,64,64); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 
imageView.contentScaleFactor = [UIScreen mainScreen].scale; 

[imageView setImage:img]; 
[self addSubview:imageView]; 
[imageView release]; 

उत्तर

3

आपका कोड काफी के रूप में है काम करना चाहिए। मुझे नहीं पता कि आपकी छवि के मूल आयाम क्या थे, लेकिन मुझे लगता है कि वे 64x64 पीएक्स थे। सही तरीके से स्केल करने के लिए, मूल छवि को 128x128 पीएक्स होना चाहिए।

एक परीक्षण के रूप में, निम्नलिखित कोड सही तरीके से सिम्युलेटर पर रेटिना संकल्प में मेरी तस्वीर का प्रदर्शन किया, और मेरे iPhone 4 पर:

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.seenobjects.org/images/mediumlarge/2006-08-19-native-lilac.jpg"]]]; 

CGRect labelFrame = CGRectMake(0, 0, 375, 249.5); 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:labelFrame]; 

[imageView setImage:img]; 
[self.view addSubview:imageView]; 

ध्यान दें कि UIImageView 375x249.5 अंक है, जिनमें से आधा है तस्वीर के मूल (पिक्सेल) आयाम। साथ ही, contentScaleFactor को सेट करना आवश्यक प्रतीत नहीं होता था।

(एक अलग रूप में के रूप में, मैं यह नहीं देख सकते हैं कि यूआरएल पर @2x निर्दिष्ट करने में मदद मिलेगी, इस मामले में, dataWithContentsOfURL: करने के लिए कॉल डेटा की एक अपारदर्शी ब्लॉब वापस आ जाएगी, फ़ाइल का नाम छोड़ दिया की कोई निशान के साथ के रूप में। ऐसा नहीं है कि है अपारदर्शी डेटा जिसे छवि को लोड करने के लिए imageWithData: पर पास किया गया है।)

7

अपने यूआरएल के अंत में #@2x.png जोड़ने का प्रयास करें। वह यूआरएल नहीं बदलता है, लेकिन छवि को रेटिना @ 2x छवि के रूप में पहचाना जाएगा। यह मेरे लिए काम करता था, लेकिन मैंने SDWebImage के साथ इस विधि का उपयोग किया।

उदा। http://www.msdomains.com/tmp/test.png#@2x.png का उपयोग कर।

+0

क्या यह वास्तविक है? – Ali

+0

मेरे लिए काम नहीं करता –

+0

क्या यह एक मजाक है? – deadlock

0

रेटिना डिस्प्ले के लिए, उसी छवि को रिज़ॉल्यूशन के साथ जोड़ें जो मूल छवि का बिल्कुल दोगुना है। इस छवि के नाम के अंत में "@ 2x" जोड़ने के लिए मत भूलना ... उदा। "image_header.png" एक छवि 320x100 तो नाम "[email protected]" (आयाम 640x200) के साथ एक और छवि ओएस द्वारा स्वचालित रूप से रेटिना प्रदर्शन के लिए चयन किया जाएगा है ... आशा है कि यह मदद करता है

+0

आप यहां बिंदु खो रहे हैं: मुख्य बंडल से लोड की गई छवियों के लिए आप जो सुझाव देते हैं वह सही है, यही वह है। – Ali

0

जब आप सीधे छवि दृश्य पर छवि यूआरएल असाइन करते हैं, तो यह इसे रेटिना के रूप में नहीं ले जाएगा।

imageView.imageURL = [NSURL URLWithString:@"http://example.com/image.png"]; 

आपको रेटिना छवि नहीं देगा।

तो, आपकी छवि के बावजूद 200x200 है, लेकिन यदि आपकी छवि दृश्य 100x100 है तो यह डाउनलोड की गई छवि से 100x100 लेगा और रेटिना उपकरणों पर पिक्सलेटेड छवि दिखाएगा।

समाधान imageURL के बजाय imageView की छवि प्रॉपर्टी का उपयोग करना होगा।

imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://example.com/image.png"]]]; 

यह 100x100 की छवि दृश्य में 200x200 छवि असाइन करेगा और इसलिए छवि को पिक्सलेट नहीं किया जाएगा।