2010-07-07 17 views
5

शीर्षक मेरे प्रश्न को काफी समझाता है। मैं सी # का उपयोग कर प्रति-पिक्सेल आधार पर जेपीईजी डेटा को पढ़ने और लिखने में सक्षम होना चाहता हूं।मैं प्रति-पिक्सेल आधार पर जेपीईजी डेटा कैसे पढ़ और लिख सकता हूं?

मैं CreateJPEG(x, y) की तर्ज जो स्मृति में एक खाली छवि सेट अप करना होगा साथ कुछ सोच रहा हूँ, और मुझे एक JPEG वस्तु देना होगा, और फिर SetPixel(x, y, Color) और GetPixel(x, y) की तरह कुछ जिनमें से बाद एक Color या कुछ और वापसी होगी समान। इसके बाद आप Apply() या Save() विधि को कॉल कर सकते हैं, उदाहरण के लिए, एक मानक जेपीईजी-पठनीय प्रारूप में छवि को सहेजने के लिए (संपीड़न विकल्पों के साथ प्राथमिक रूप से, लेकिन यह आवश्यक नहीं है)।

और मुझे लगता है कि कुछ सी # लाइब्रेरी या नेमस्पेस यह सब एक बहुत ही आसान प्रक्रिया बनाता है, मैं बस इसके बारे में जाने का सबसे अच्छा तरीका जानना चाहता हूं।

+0

बस ध्यान रखें कि जब आप एक जेपीईजी एन्कोडेड तस्वीर का एक पिक्सेल बदलते हैं, तो तस्वीर के अधिक पिक्सेल गैर-हानिकारक संपीड़न जेपीईजी उपकरणों के कारण बदल जाएंगे। –

+0

जेपीईजी प्रारूप के बारे में सिर्फ एक नोट - क्योंकि यह एक हानिकारक संपीड़न है, तो एक व्यक्तिगत पिक्सेल का रंग सहेजने के बीच बदल सकता है, भले ही आपने इसे सीधे नहीं बदला है, इसलिए लगातार पिक्सेल रंगों पर भरोसा न करें EDIT: पीटा :) –

+0

दाएं;) मैं पूछ रहा था क्योंकि मैं कुछ छवि तुलना सॉफ्टवेयर लिखने पर अपना हाथ आजमाने की कोशिश करता हूं, मूल रूप से, 2 छवियों को देखते हुए, मतभेदों का एक बिटमैप उत्पन्न करता हूं। मुझे पता है कि यह पहले किया गया है, लेकिन यह मेरे लिए अच्छा अभ्यास होगा, और मुझे सही दिशा में एक त्वरित बिंदु की आवश्यकता है (कुछ वास्तव में वास्तव में अच्छा है)। :) – qJake

उत्तर

9

Bitmap कक्षा पर एक नज़र डालें। एकल पिक्सेल में हेरफेर करने के अलावा उन्नत ड्राइंग के लिए आपको Graphics कक्षा का उपयोग करना होगा।

var image = new Bitmap("foo.jpg"); 

var color = image.GetPixel(1, 2); 
image.SetPixel(42, 42, Color.White); 

image.Save("bar.jpg", ImageFormat.Jpeg); 

लासे वी Karlsen उसके जवाब में उल्लेख के रूप में यह वास्तव में JPEG फ़ाइल में हेरफेर नहीं होंगे। जेपीईजी फ़ाइल को डिकंप्रेस किया जाएगा, इस छवि डेटा को बदल दिया जाएगा, और एक नई जेपीईजी फ़ाइल को सहेजने पर परिवर्तित छवि डेटा से बनाया गया है।

इससे छवि की गुणवत्ता कम हो जाएगी क्योंकि एक अनारक्षित छवि को फिर से दबाकर आम तौर पर हानिकारक जेपीईजी संपीड़न की प्रकृति के कारण थोड़ा-समान जेपीईजी फ़ाइल नहीं मिलती है।

कुछ ऑपरेशन हैं जो जेपीईजी फ़ाइलों पर डिकंप्रेसिंग और रीकंप्रेस किए बिना किए जा सकते हैं - उदाहरण के लिए 90 डिग्री से घूर्णन करना - इस श्रेणी में एकल पिक्सल को मैनिपुलेट करना उचित नहीं है।

+1

"लापरवाही संपीड़न"? तुम्हारा मतलब हानिकारक है। – Dykam

+0

काफी संभव ...: डी Thx! –

8

जेपीईजी एक प्रसंस्करण प्रारूप नहीं है, यह एक भंडारण प्रारूप है।

इस प्रकार, आप वास्तव में स्मृति में एक जेपीईजी छवि का उपयोग नहीं करते हैं, तो आपके पास सिर्फ एक छवि है। यह केवल तभी होता है जब आप इसे स्टोर करते हैं कि आप प्रारूप चुनते हैं, जैसे पीएनजी या जेपीईजी।

इस तरह, मुझे विश्वास है कि आप Bitmap कक्षा में .NET में देख रहे हैं।

संबंधित मुद्दे

 संबंधित मुद्दे