2009-04-24 6 views
7

मैं stretchableImageWithLeftCapWidth का उपयोग कर एक छवि का आकार करने के लिए कोशिश कर रहा हूँ के साथ एक छवि का आकार बदलना: यह सिम्युलेटर पर काम करता है, लेकिन डिवाइस पर, खड़ी हरी पट्टियों प्रकट होता है।stretchableImageWithLeftCapWidth

मैं उपयोग करने के लिए imageNamed, imageWithContentOfFile और imageWithData लो छवि को लोड की कोशिश की है, इसे बदल नहीं करता है।

UIImage *bottomImage = [[UIImage imageWithData: 
    [NSData dataWithContentsOfFile: 
    [NSString stringWithFormat:@"%@/bottom_part.png", 
    [[NSBundle mainBundle] resourcePath]]]] 
     stretchableImageWithLeftCapWidth:27 topCapHeight:9]; 

UIImageView *bottomView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 200+73, 100, 73)]; 
[self.view addSubview:bottomView]; 
UIGraphicsBeginImageContext(CGSizeMake(100, 73)); 
[bottomImage drawInRect:CGRectMake(0, 0, 100, 73)]; 
UIImage *bottomResizedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
bottomView.image = bottomResizedImage; 

परिणाम देखें: हरे रंग के सलाखों को वहां नहीं होना चाहिए, वे सिम्युलेटर पर दिखाई नहीं देते हैं।

alt text http://www.quicksnapper.com/files/5161/96232162149F1C14751048_m.png

उत्तर

12

क्या आपको यह पता चला?

लगता है जैसे कि यह UIGraphicsGetImageFromCurrentImageContext साथ एक बग हो सकता है। अगर मैं ऐसी छवि खींचता हूं जिसमें पारदर्शिता है तो मुझे लाल/हरे रंग की कलाकृतियां मिलती हैं। ये केवल डिवाइस पर दिखाई देते हैं (सिम में नहीं)। इसके अलावा, अगर मैं छवि से पारदर्शिता हटा देता हूं, तो कलाकृतियों को दूर कर दिया जाता है।

अद्यतन: कुछ और अजीबता। मैं पहले पीएनजी का उपयोग कर रहा था, इसलिए मैंने इसके बजाय एक पारदर्शी gif का उपयोग करने की कोशिश की। एक जीआईएफ का उपयोग, सिम पर आर्टिफैक्ट समस्या दिखाता है।

जीत!

अपनी परियोजना के लिए निर्माण सेटिंग में 'कम्प्रेस पीएनजी फ़ाइलें' बंद करें: एक समाधान मिला। इसे अक्षम करने से पीएनजी पारदर्शिता बिना किसी कलाकृतियों के काम करती है।

+0

वाह, धन्यवाद। –

5

ऐसा लगता है कि आप अनावश्यक कोड का एक बहुत कुछ लिख रहे हैं, लेकिन क्योंकि यह संदर्भ से बाहर है और वहाँ यह करने के लिए अधिक है कि मैं याद कर रहा हूँ है शायद कि बस है।

[[UIImage imageName: @"bottom_part.png"] stretchableImageWithLeftCapWidth: 27 topCapHeight: 9]; 

अपने कोड के किस हिस्से आप इस चित्र को प्रदर्शित कर रहे हैं:

छवि प्राप्त करने के लिए? यानी आप उपरोक्त छवियों को किस विधि में चित्रित कर रहे हैं?

क्यों न केवल UIImageView का उपयोग करें और छवि को वहां रखें? फिर आपको छवि संदर्भ ड्राइंग इत्यादि में से कोई भी करने की आवश्यकता नहीं है

0

मैं 5 घंटे खर्च किया है यह कल रात डीबगिंग, xcode में पीएनजी संपीड़न अक्षम करने मेरे लिए कुछ भी नहीं किया।

किसी और के लिए लंबवत, हरे, सलाखों/रेखाओं/कलाकृतियों को खिंचाव के साथ मिलकर इमेज विथलफ्ट कैपविड्थ (यूआईएममेज एपीआई में) - यह पोस्ट आपके लिए है।

मेरे पास एक कस्टम बारबटन पृष्ठभूमि के लिए 21x30 है जिसे मैं चौड़ा करना चाहता हूं, लेकिन ओपी के समान हरे रंग की पट्टियों को मिला। मुझे फ़ोटोशॉप के साथ बनाया गया एक पीएनजी मिला और यह ठीक काम करता है - मेरा गिंप के साथ बनाया जाता है। वैसे भी, फ़ाइलों से सभी हिस्सों को अलग करना (तीन आवश्यक लोगों को छोड़कर) कोई फर्क नहीं पड़ता। न तो पीएनजी संपीड़न अक्षम कर दिया।

क्या मेरे लिए काम किया है यह था:

  1. मेरी छवि के ऊपर एक खाली पंक्ति (जो अब 21x31 है) जोड़ें।
  2. स्केल की गई छवि बनाते समय शीर्ष कैपहेइट: 0 सेट करें।
  3. जब मैं अपनी स्केल की गई छवि का उपयोग करता हूं, तो मैं एक CGContext में आ जाता हूं, जिसे बाद में यूआईएममेज बनाने के लिए उपयोग किया जाता है।मैं इसे आकर्षित करने के लिए उपयोग करता हूं: [छवि drawInRect: CGRectMake (0, -2, चौड़ाई, 32)];

इससे समस्या दूर हो जाती है (मेरे लिए)।

मुझे लगता है बग/मुद्दे नहीं खड़ी स्केलिंग जब ड्राइंग के साथ क्या करना है, तो मैं पहले स्रोत छवि लाइन है, जो मेरी रचना के बाहर आकर्षित कर रहे हैं (दो पंक्तियों में) की स्केलिंग बाध्य करते हैं।

मुझे आशा है कि इससे किसी को 5 घंटे बचाएगा।

/Krisb

1

मेरे मामले में मैं एक UIImageView जो मैं क्षैतिज फैला था। मुझे खिंचाव वाली छवि में एक अजीब ऊर्ध्वाधर सफेद रेखा मिली।

उपरोक्त समाधान मेरे लिए काम नहीं करते थे। हालांकि, निम्नलिखित किया:

कास्ट एक पूर्णांक मूल्य के लिए चौड़ाई मूल्य:

myNewViewFrame.size.width = (int)newWidth; 
myView.frame = myNewViewFrame; 

यह रूप में अच्छी तरह तुम लोगों के लिए काम करता आशा है कि ...

+0

धन्यवाद हेनरिक, मुझे बस एक ही समस्या थी और यह ठीक हो गया। – Echelon

0

मैं UIView के ज्यादा के पक्ष में stretchableImageWithLeftCapWidth उपयोग बंद कर दिया अधिक अच्छी तरह से व्यवहार की सामग्री संपत्ति खींचें। मैंने कभी भी हरे रंग के सलाखों को नहीं देखा है, लेकिन आम तौर पर मैं सामग्री का उपयोग करने की सिफारिश करता हूं खिंचाव के बजाय इमेज विथलफ्ट कैपविड्थ।

+0

आप सामग्री के साथ एंडकैप्स कैसे प्राप्त करते हैं? – Adam

0

मैंने प्रस्तावित नाइट जैसे पीएनजी संपीड़न को अक्षम करने की कोशिश की, लेकिन यह मेरे लिए काम नहीं करेगा (आईओएस 3.1.3)। मैंने फिर पीएनजी की बजाय टीआईएफएफ छवियों का उपयोग करने की कोशिश की, जो काम करता है।

0

मुझे सामग्री के साथ समान समस्याएं मिली हैं (0.5, 0.5, 0, 0) के मान का उपयोग करते समय सामग्री के किसी भी UIView पर सामग्री खींची गई है। यानी केंद्र पिक्सेल पर खिंचाव।

मुझे पता चला है कि केवल आईफोन 3 जी (संभवतः 2 जी) इस समस्या को प्रदर्शित करता है। आईफोन 4 और 3 जीएस ठीक है। तो, मुझे लगता है कि यह पुराने ग्राफिक्स एचडब्ल्यू के साथ एक समस्या है।

मुझे समस्या के चारों ओर एक तरह से मिला एक थोड़ा बड़ा केंद्र क्षेत्र पर फैलाना था।

उदा। (0.4, 0.4, 0.1, 0.1)

+0

नोट मैं सहमत हूं और इन समस्याओं को 3 जी पर हो रहा है लेकिन 3gs और 4 नहीं – yeahdixon