تحويل قماش إلى صورة نقطية في Android
-
26-09-2019 - |
سؤال
أحاول تطوير تطبيق على قماش ، أنا أرسم صورة نقطية على القماش. بعد الرسم ، أحاول التحويل إلى صورة نقطية.
هل يمكن لأي شخص أن يعطيني اقتراحًا.
شكرا لكم مقدما.
المحلول
تعتمد النصيحة على ما تحاول القيام به.
إذا كنت تشعر بالقلق من أن أدوات التحكم الخاصة بك تستغرق وقتًا طويلاً للرسم ، وكنت ترغب في السحب إلى صورة نقطية حتى تتمكن لا تريد أن تكون مزدوجة تخمين النظام الأساسي - يتحكم تلقائيًا في رسمها إلى خرائط نقطية مؤقتة ، ويمكن جلبها حتى من عنصر التحكم باستخدام getDrawingCache()
إذا كنت ترغب في الرسم باستخدام قماش إلى صورة نقطية ، فإن الوصفة المعتادة هي:
- قم بإنشاء صورة نقطية من الحجم الصحيح باستخدام
Bitmap.createBitmap()
- قم بإنشاء مثيل قماش يشير إلى أن هذه الصورة النقطية باستخدامها
Canvas(Bitmap)
البناء - ارسم إلى القماش
- استخدم صورة نقطية
نصائح أخرى
لذلك يمكنك إنشاء جديد Bitmap
, ، علي سبيل المثال:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 )
مع width
و height
كونها نفس القماش الخاص بك.
بعد ذلك ، استخدم canvas.setBitmap(myBitmap)
, ، لكن لا drawBitmap()
.
بعد الاتصال setBitmap
, ، كل ما ترسمه على قماش myBitmap
الذهاب حسب رمز المثال الذي أوضحته.
تعديل:
لا يمكنك إنشاء صورة نقطية مباشرة مثل:
Bitmap myBitmap = new Bitmap( (int)Width, (int)Height, Config.RGB_565 );
يجب استخدامك بدلاً من ذلك:
Bitmap myBitmap = Bitmap.createBitmap( (int)Width, (int)Height, Config.RGB_565 );
مثال آخر:
public Bitmap getBitmapNews(int item , boolean selected, int numbernews){
Bitmap bitmap;
if(selected)
bitmap=mBitmapDown[item].copy(Config.ARGB_8888, true);
else
bitmap=mBitmapUp[item].copy(Config.ARGB_8888, true);
Canvas canvas = new Canvas(bitmap);
if(numbernews<10){
canvas.drawBitmap(mNotiNews[numbernews],0,0,null);
}else{
canvas.drawBitmap(mNotiNews[0],0,0,null);
}
return bitmap;
}
فيما يلي خطوات التحويل من قماش إلى صورة نقطية وتخزينها إلى المعرض أو مجلد معين.
ملاحظة: تأكد من منحك الإذن write_external_storage
Activity_main.xml
<LinearLayout
android:id="@+id/linearLayout"
android:orientation="horizontal"
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<DrawingView
android:id="@+id/drawingView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity.Java
إنشاء مرجع لتخطيط الوالدين
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
لتخزينه في المعرض
final String imagename = UUID.randomUUID().toString() + ".png"; MediaStore.Images.Media.insertImage(getContentResolver(), linearLayout .getDrawingCache(), imagename, "drawing");
للتحويل إلى صورة نقطية
linearLayout.setDrawingCacheEnabled(true); linearLayout.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(linearLayout.getDrawingCache());