2010-07-19 31 views
10

मैं एक गेम इंजन पर काम कर रहा हूं और मैं कई प्रारूपों के लिए छवि लोडर लिखने के लिए बहुत अधिक हूं, इसलिए मेरा सवाल यह है: क्या छवि फ़ाइलों को लोड करने के लिए एक सारणीबद्ध छवि लोडिंग लाइब्रेरी है ? मुझे बस फ़ाइलों को लोड करने की आवश्यकता है, फिर उन्हें पिक्सेल की सरणी का उपयोग करके स्क्रीन पर विभाजित करें।सी/सी ++ छवि लोड हो रहा है

+2

क्या प्लेटफॉर्म? – bshields

+13

एक झगड़ा होने का सही दृष्टिकोण प्रतीत होता है। पहिया को पुन: पेश न करें। – Tom

+0

http://stackoverflow.com/a/28633405/184572 –

उत्तर

23

मैं हमेशा CImg का प्रशंसक हूं। इसका उपयोग करना बहुत आसान है। एक अन्य उपयोगकर्ता को the answer भी पसंद आया। मैं उसी उदाहरण को पोस्ट करूंगा जिसे मैंने उत्तर में पोस्ट किया था ताकि आप देख सकें कि पिक्सल और आयाम जानकारी तक पहुंचना कितना आसान है।

CImg<unsigned char> src("image.jpg"); 
int width = src.width(); 
int height = src.height(); 
unsigned char* ptr = src.data(10,10); // get pointer to pixel @ 10,10 
unsigned char pixel = *ptr; 
+0

शर्म की बात है कि उनके पास 64-बिट पोर्ट नहीं है। कम से कम वे अपने एफएक्यू में ऐसा कहते हैं। –

+0

आपका क्या मतलब है? यह लाइब्रेरी सिर्फ एक हेडर फ़ाइल है और यह 64 बिट मोड में संकलित है। –

11

FreeImage यहाँ एक अच्छा खुला स्रोत पुस्तकालय

है एक उदाहरण कोड है, डेटा के साथ पहुँचा जा सकता है "out.data()"

FREE_IMAGE_FORMAT format = FreeImage_GetFileTypeU(filename.c_str()); 
if (format == FIF_UNKNOWN)  format = FreeImage_GetFIFFromFilenameU(filename.c_str()); 
if (format == FIF_UNKNOWN)  throw(std::runtime_error("File format not supported")); 

FIBITMAP* bitmap = FreeImage_LoadU(format, filename.c_str()); 
FIBITMAP* bitmap2 = FreeImage_ConvertTo32Bits(bitmap); 
FreeImage_Unload(bitmap); 

std::vector<char> out(FreeImage_GetWidth(bitmap2) * FreeImage_GetHeight(bitmap2) * 4); 
FreeImage_ConvertToRawBits((BYTE*)out.data(), bitmap2, FreeImage_GetWidth(bitmap2) * 4, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, true); 

FreeImage_Unload(bitmap2); 
+0

सी ++ रैपर कम से कम g ++ के साथ थोड़ा छोटी गाड़ी लग रहा है। लाइब्रेरी को लिंक करना समस्याग्रस्त है, हालांकि सी संस्करण ठीक काम करता है। – jiggunjer

1

आप SDL_Image पर एक नज़र हो सकता था, Simple DirectMedia Layer की एक उप-परियोजना। यह कई अलग-अलग छवि प्रारूपों को लोड करने के लिए एक आसान अमूर्तता के रूप में कार्य करता है। एसडीएल सी में लिखा गया है लेकिन सी या सी ++ कोड के साथ उपयोग करना आसान है।

+0

ओपी यह भी इंगित नहीं करता है कि सी और सी ++ 'एक भाषा' हैं। ओपी एक ऐसे समाधान की तलाश में है जो या तो सी या सी ++ है। –

+0

@gbrandt, एसडीएल के लिए कार्यान्वयन भाषा को प्रतिबिंबित करने के लिए मेरा उत्तर अपडेट किया गया। –

3

यदि आप ओपनजीएल का उपयोग कर रहे हैं, तोएक अच्छी पसंद है क्योंकि इसकी शैली और सम्मेलन किसी अन्य पुस्तकालय की तुलना में ओपनजीएल का पालन करते हैं। यह स्थापित करने के लिए अपेक्षाकृत आसान है और कई प्रारूपों के लिए भी बहुत अच्छा समर्थन है।

वास चीज़ के बारे में एक बात। हालांकि काम करने वाले तीसरे पक्ष कोड को स्थापित करना अच्छा है, जिसकी अच्छी तरह से जांच की गई है और आपको समय बचाता है, यह जानने के बारे में कुछ भी कहा जाना चाहिए कि छवि लोडिंग कैसे काम करती है और यह किस तरह से काम करती है। यदि आप वास्तव में किसी चीज़ पर अच्छा होना चाहते हैं, तो मुझे विश्वास है कि आपको वास्तव में सीखना होगा कि इसे स्क्रैच से कैसे किया जाए। भले ही आप अंत में तीसरे पक्ष के कोड का उपयोग कर समाप्त हो।

1

फिर भी एक और संभावना (मुख्य रूप से, यदि विंडोज के लिए विशेष रूप से नहीं है) CXImage है। कई अन्य लोगों पर इसका स्पष्ट लाभ कई मामलों के कच्चे प्रारूपों का समर्थन कर रहा है, यदि आपके लिए महत्वपूर्ण है।

4

Boost's GIL है जो मूल रूप से एडोब द्वारा विकसित किया गया था। यह सबसे सहज नहीं हो सकता है, लेकिन यह निश्चित रूप से सबसे पूर्ण और शक्तिशाली libs में से एक है।

+1

'बूस्ट :: gil' अपने आप किसी भी छवि प्रारूप को लोड नहीं करता है। यह क्या करता है पिक्सेल-एल्गोरिदम करने के लिए एक समान इंटरफ़ेस प्रदान करता है। 'बूस्ट :: गिल' में छवि लोडर हेल्पर्स के लिए आपको संबंधित पुस्तकालयों (जैसे 'libtiff', 'libpng', आदि) – kizzx2

+1

की आवश्यकता होती है जो सीआईएमजी के लिए भी सच है, यह कुछ प्रारूपों को मूल रूप से समर्थन देता है, बाकी की आवश्यकता 3 पार्टी पुस्तकालयों। – jiggunjer

0

OpenImageIO, उन के बीच कई अलग अलग फ़ाइल स्वरूपों TIFF, JPEG/JFIF, Openexr, PNG, एचडीआर/RGBE आईसीओ, बीएमपी, टार्गा, जेपीईजी-2000, आरमेंन Zfile, फिट बैठता है, DDS, Softimage पीआईसी, पीएनएम, Dpx का समर्थन करता है सिनेन, आईएफएफ, फील्ड 3 डी, पीटीएक्स, फ़ोटोशॉप PSD, वेवफ़्रंट आरएलए, एसजीआई, वेबपी, और जीआईएफ

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