2011-10-06 12 views
12

से बिटमैप मेरे पास कुछ एनडीके आधारित सी ++ कोड है जिसे एंड्रॉइड बिटमैप ऑब्जेक्ट बनाने की आवश्यकता है।)एक एंड्रॉइड.graphics बनाना। C++

तो विधि मैं कॉल करना चाहते हैं

Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

तो यह करने के लिए है, मुझे यकीन है कि वहाँ सी ++ कोड से सीधे यह करने के लिए एक रास्ता है, लेकिन इसके नहीं करने के लिए चीजों की सबसे आसान कर रहा हूँ देशी कोड से मुझे निम्नलिखित चरणों को करने की आवश्यकता है।

  • कक्षा (android.graphics.Bitmap) खोजें।
  • "createBitmap" की स्थिर विधि आईडी प्राप्त करें।
  • enum बनाएँ।
  • स्थिर विधि को कॉल करें।

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

हालांकि मैं चरण 2 और 3 पर बहुत खो गया हूं। मेरा कोड इस समय इस तरह दिखता है:

jclass  jBitmapClass  = gpEnv->FindClass("android.graphics.Bitmap"); 
jmethodID jBitmapCreater  = gpEnv->GetStaticMethodID(jBitmapClass, "createBitmap", "(IILandroid/graphics/Bitmap/Config;)Landroid/graphics/Bitmap;"); 

लेकिन फिर मैं अटक गया हूं। मैं देशी सी/सी ++ कोड से एनम कैसे बना सकता हूं?

इसके अलावा GetStaticMethodID में मेरा अंतिम पैरामीटर सही है? मुझे यकीन नहीं था कि विशिष्ट वस्तुओं को कैसे निर्दिष्ट किया जाए लेकिन मुझे लगता है कि उपर्युक्त काम करता है। हालांकि, enum पर गलत हो सकता है!

अग्रिम धन्यवाद।

उत्तर

19

मैं अपने कोड में यह है, तो मैं तुम्हें जवाब यह है कि काम करता है दे सकते हैं। , Bitmap.Config की

jclass java_bitmap_class = (jclass)env.FindClass("android/graphics/Bitmap"); 
jmethodID mid = env.GetStaticMethodID(java_bitmap_class, "createBitmap", "(IILandroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap;"); 

नोट हस्ताक्षर उसमें $ साइन किया है:

1) createBitmap के स्थिर विधि आईडी (पूर्णांक चौड़ाई, पूर्णांक ऊंचाई, Bitmap.Config config) प्राप्त करें।

2) दिए गए मान के साथ Bitmap.Config के लिए enum बनाना:

const wchar_t config_name[] = L"ARGB_8888"; 
jstring j_config_name = env.NewString((const jchar*)config_name, wcslen(config_name)); 
jclass bcfg_class = env.FindClass("android/graphics/Bitmap$Config"); 
jobject java_bitmap_config = env.CallStaticObjectMethod(bcfg_class, env.GetStaticMethodID(bcfg_class, "valueOf", "(Ljava/lang/String;)Landroid/graphics/Bitmap$Config;"), j_config_name); 

यहाँ हम नामित मूल्य से Bitmap.Config enum पैदा करते हैं। एक और संभावित मूल्य स्ट्रिंग "RGB_565" है।

3) कॉलिंग createBitmap:

java_bitmap = env.CallStaticObjectMethod(java_bitmap_class, mid, w, h, java_bitmap_config); 
+0

अहह शानदार मेरे खोज क्लास में "।" एस के बजाए स्लैश का उपयोग करना एक जीवन बचतकर्ता है !! :) – Goz

+3

आपका कोड क्रैश का कारण बनता है, लेकिन जब मैंने कॉन्फ़िगर स्ट्रिंग को इस पर बदल दिया, तो यह काम किया: जॉबजेक्ट java_bitmap_config = env-> CallStaticObjectMethod (bcfg_class, midValueOf, env-> न्यूस्ट्रिंगटएफ ("ARGB_8888")); –

+0

env के रूप में एक सूचक है जिसे आपको "env" को बदलने की भी आवश्यकता है।"से" env-> " – Tertium

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