[संगीत खेल] ZAMYLA चान: चलो झटका आकार बदलने के साथ चीजों को. आकार बदलने के लिए, उपयोगकर्ता के माध्यम से, में समाप्त हो जाएगी कमांड लाइन, एक बिटमैप छवि है कि वे तुम्हें एक संख्या से पैमाने पर करना चाहता उन्होंने यह भी में पास करने वाले कमांड लाइन में. हम यह कैसे करते हो? खैर, सबसे पहली बात, चलो चरणों में टूट. आप infile खोलना चाहते करने जा रहे हैं वे तुम्हें दे, साथ ही उस बनाने और outfile कि खुले तुम डाल करने के लिए जा रहे हैं अंदर का आकार बदला छवि फिर, आप आकार बदलने, और कर रहे हैं क्योंकि यह एक बिटमैप है, क्योंकि यह एक शीर्ष लेख, ताकि आप भी हैडर अद्यतन करने के लिए जा रहे हैं outfile के लिए जानकारी, और अंदर कि लिखना उसके बाद, आप में पढ़ने के लिए जा रहे हैं infile की scanline, पिक्सेल द्वारा पिक्सेल, क्षैतिज आकार बदलने और उन पिक्सल लिख outfile, यथा विनिर्दिष्ट उपयोगकर्ता के पैमाने से. आप को याद करने के लिए जा रहे हैं आवश्यक के रूप में गद्दी जोड़ें. बाद में उस पर और अधिक. और फिर, यह भी खड़ी आकार. ठीक है. तो यह थोड़ा और अधिक होने जा रहा है यह डन कौन से जटिल है, लेकिन क्या इसी तरह की है कि copy.c इच्छा है, फिर से, बहुत उपयोगी साबित होते हैं. , Copy.c एक फ़ाइल को खोलता है कि याद रखें के लिए हेडर सूचना को अद्यतन करता है outfile, तो scanline में पढ़ता है, पिक्सेल द्वारा पिक्सेल, हर पिक्सेल लेखन आउटपुट फाइल के scanline में. तो फिर, अपना पहला कदम शायद हो सकता है सी.पी., copy.c, resize.c के लिए हो अपने PSET5 निर्देशिका में. आप इसे कॉपी से पहले, लेकिन याद रखें, आप समझते हैं कि बनाना बहुत अच्छी तरह से copy.c. ठीक है. तो चलो एक फाइल खोलते हैं. तुम ऐसा करने के लिए पता. मैं तुम्हें करने के लिए कि छोड़ने के लिए जा रहा हूँ. अगला, हेडर सूचना को अद्यतन outfile के लिए. हम एक नया बिटमैप है क्योंकि, हम नए हैडर जानकारी है. यहाँ क्या बदल रहा है? खैर, फ़ाइल का आकार बदलने जा रहा है हम अधिक लिए जा रहे हैं, क्योंकि पहले की तुलना में पिक्सल. छवि का आकार भी, इस प्रकार है है, के रूप में परिवर्तित करने के लिए जा रहा चौड़ाई और ऊंचाई. तो जो चर उन वास्तव में, कर रहे हैं? वैसे, अगर आप शीर्ष लेख में देखो जानकारी, आप देख वहाँ कुल का प्रतिनिधित्व करता है जो biSizeImage, बाइट्स में छवि का आकार, पिक्सल और पैडिंग भी शामिल है. biWidth छवि की चौड़ाई है पिक्सल में padding शून्य से. biHeight की ऊंचाई है पिक्सल में छवि. और इसलिए उन में समाहित कर रहे हैं structs BITMAPFILEHEADER और BITMAPINFOHEADER. आप ने जो एक है जो बता सकता है bmp.h के लिए जा रहा है और कम से देख BITMAPINFOHEADER संरचना और देखकर चर रहे सूचीबद्ध हैं. तो outfiles हैडर अद्यतन करने के लिए जानकारी, आप चाहते करने जा रहे हैं के उन मूल्यों को बदलने ऊंचाई और चौड़ाई. लेकिन संभावना है, आप कुछ जरूरत हो सकती है infile के हेडर सूचना की बाद में, तो सबसे अच्छा दोनों का ट्रैक रखने के लिए. लेकिन अपने चर के साथ बहुत स्पष्ट होना नामों इतना है कि आप ऐसा नहीं कर गलती गलत मूल्यों में लिखना outfile लिए हैडर. तो अब हम में पढ़ने को मिलता है scanline पिक्सेल द्वारा पिक्सेल. फिर, हम अपने भरोसेमंद को चालू करने के लिए जा रहे हैं मैं / हे पुस्तकालय फ़ाइल, और देखो fread समारोह. fread एक संरचना के लिए एक संकेत में लेता है जो बाइट्स में शामिल होंगे आप में पढ़ रहे हैं, प्रत्येक का आकार आप पढ़ रहे हैं कि तत्व - फिर, sizeof उपयोगी होने जा रहा है यहां एक समारोह, की संख्या आप कर रहे हैं कि आकार, आकार के तत्वों, फिर अंत में पढ़ने, और, inpointer, फ़ाइल कि आप से पढ़ रहे हैं. तो आप संख्या तत्वों ले जा रहे हैं inpointer से आकार, और की डेटा में डाल. अब यह क्षैतिज आकार बदलने के लिए समय है. n में प्रत्येक पिक्सेल के लिए तो, 2 के बराबर होती है अगर infile, हम इसे लिखने जा रहे हैं दो बार outfile में. हम कैसे फ़ाइलें लिख सकता हूँ? खैर, हम fwrite समारोह है, तो हम संरचना करने के लिए सूचक ले लिया है कि आप कर रहे हैं कि बाइट्स शामिल से लेखन, और फिर हम में पारित आकार, संख्या, और उत्पादन, जहां आपको लगता है कि लिखने के होने जा रहे हैं. और फिर एक प्रक्रिया को दोहराने के लिए, हो जाएगा पाश के लिए सक्षम एक साधारण चलने का. लेकिन हमें याद करने की जरूरत है अंदर गद्दी जोड़ने के लिए गद्दी की अवधारणा है कि, अच्छी तरह से है, प्रत्येक पिक्सेल तीन काटता है, लेकिन प्रत्येक scanline चाहिए का आकार 4 बाइट का गुणक हो. तो बॉलीवुड की संख्या नहीं है अगर एक 4 में से कई, हम कुछ जोड़ने की जरूरत बस शून्य है जो गद्दी,. अब, यह किया कौन विपरीत, और विपरीत प्रतिलिपि, तो infile छवि और outfile फ़ाइल अलग है है विभिन्न गद्दी वे कर रहे हैं, क्योंकि अलग widths. ठीक है. तो शायद एक सूत्र होगा यहां काम में आते हैं. मैं यह पता लगाने के लिए आप के लिए छोड़ देंगे, लेकिन गद्दी लिखने के लिए, आपको बताना है कि, खैर, यह सिर्फ एक सरल fputc समारोह है, चरित्र में गुजर आपको तो लिखना चाहते हैं, और कहा कि फ़ाइल सूचक है कि आप करने के लिए लिखना चाहते हैं. तो अब हम, क्षैतिज आकार बदला गया है कि और फिर, गद्दी का इस्तेमाल किया आप अपनी फाइल को स्थानांतरित करने की जरूरत है कि याद स्थिति सूचक, क्योंकि आप गद्दी में fread नहीं कर सकते हैं. तो क्या आप यकीन है कि बनाना चाहते अपनी फाइल infile में स्थिति सूचक सही बिंदु पर है. हम भी चाहते हैं खड़ी आकार. हम सिर्फ यह क्षैतिज खिंचाव नहीं कर सकते हर पंक्ति की जरूरत है क्योंकि एन बार नकल करने की. अब, अलग वहाँ कई हैं उपाय यह है. एक तो, हम में, एक फिर से लिखना विधि का उपयोग कर सकते हैं हम पिक्सल के सभी याद है कि की दी गई एक सरणी में पंक्ति, और फिर हम जैसा कि सरणी लिखना कई बार जरूरत के रूप में. या जहां recopy तरीका है, infile में एक पंक्ति में पढ़ने के बाद और फिर outfile में लेखन कि, गद्दी उनका कहना है, हम fseek मूल पंक्ति की शुरुआत करने के लिए वापस, और तब क्षैतिज दोहराने वहाँ से आकार. भले ही विधि की, हालांकि, आप हूँ हर पिक्सेल दोहराया जाना चाहते हैं n बार, और हर पंक्ति होने के लिए साथ ही एन बार दोहराया. उस के साथ, आप बिटमैप होगा जीवन से भी बड़ा. मेरा नाम Zamyla है, और इस CS50 है.