عند استخدام surfaceView لانشاء الرسومات عوضا عن view هل يمكن حفظ تلك الرسومات على هيئة bitmap بالرغم من أن Bitmap bitmap = object.getDrawingCache(); لا تعمل مع surfaceview
هل هناك حل لهذه المشكلة ؟؟
عند استخدام surfaceView لانشاء الرسومات عوضا عن view هل يمكن حفظ تلك الرسومات على هيئة bitmap بالرغم من أن Bitmap bitmap = object.getDrawingCache(); لا تعمل مع surfaceview
هل هناك حل لهذه المشكلة ؟؟
رب ارحمهما كما ربياني صغيرا
اقرأ الموضوع التالي:
هذا المثال أخي .S.T.A.L.K.E.R يستخدم الـ view العادية وانا استخدم surfaceView يبدو أن هناك اختلافا بينهما
لك جزيل الشكر على تفاعلك الدائم
لا حرمك الله الأجر
رب ارحمهما كما ربياني صغيرا
لا يا اخي
الموضوع نفسه الذي تبحث عنه
Bitmap bitmap = Bitmap.createBitmap(240, 320, Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
/**
* Draw on your Canvas
*/
FileOutputStream fileOutputStream=new FileOutputStream(new File(path));
bitmap.compress(CompressFormat.JPEG, 90, fileOutputStream);ال Canvas هو نفسه المستخدم بال SurfaceView
جزاك الله خيرا أخي ولكن حين استخدمت هذه الطريقة الجهاز يقول أن البرنامج لا يستجيب
:/
رب ارحمهما كما ربياني صغيرا
عالاكيد لن يستجيب معك
اذا كنت تستخدم هذا الكود خلال الThread Run
اخي العزيز جزاك الله خيرا على هذه الردود الكافية و الوافية ولقد اقفت عمل thread ثم قمت بحفظ الصورة ولكن ايضا الصورة خالية .. هل يمكن أن تشرح الطريقة العامة لعمل surface view حتى تتضح لي الفكرة و بارك الله فيك
رب ارحمهما كما ربياني صغيرا
هل من الممكن مساعدتنا بوضع كود؟
package com.harktat.mohamed;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.R.color;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Cap;
import android.graphics.Paint.Join;
import android.graphics.Paint.Style;
import android.graphics.Path;
import android.graphics.PorterDuff.Mode;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;
public class SegnatureActivity extends Activity implements OnTouchListener {
/** Called when the activity is first created. */
ourSurface object;
Path myPath;
float startX, startY, finalX, finalY;
Thread myThread = null;
Canvas myCanvas;
SurfaceHolder myHolder;
Paint myPaint;
Bitmap saveIcon, deleteIcon, unlockIcon;
Bitmap originalBitmap ;
boolean canIDraw = false;
boolean needToDraw = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
object = new ourSurface(this);
object.setOnTouchListener(this);
object.setDrawingCacheEnabled(true);
setContentView(object);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
object.pause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
object.resume();
}
public class ourSurface extends SurfaceView implements Runnable {
public ourSurface(Context context) {
super(context);
// TODO Auto-generated constructor stub
myPath = new Path();
myHolder = getHolder();
}
public void run() {
// TODO Auto-generated method stub
while (canIDraw) {
if (!myHolder.getSurface().isValid()) {
continue;
}
myCanvas = myHolder.lockCanvas();
myCanvas.drawColor(Color.BLACK);
drawMyBasicShapes();
myCanvas.drawPath(myPath, myPaint);
myHolder.unlockCanvasAndPost(myCanvas);
}
}
public void pause() {
canIDraw = false;
while (true) {
try {
myThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myThread = null;
break;
}
}
public void resume() {
canIDraw = true;
myThread = new Thread(this);
myPaint = new Paint();
myPaint.setColor(Color.LTGRAY);
myPaint.setStyle(Style.STROKE);
myPaint.setStrokeCap(Cap.ROUND);
myPaint.setStrokeJoin(Join.ROUND);
myPaint.setStrokeWidth(2);
saveIcon = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(
getResources(), R.drawable.save_icon), 50, 50, true);
deleteIcon = Bitmap.createScaledBitmap(BitmapFactory
.decodeResource(getResources(), R.drawable.delete_icon),
50, 50, true);
unlockIcon = Bitmap.createScaledBitmap(BitmapFactory
.decodeResource(getResources(), R.drawable.unlock), 50, 50,
true);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
// TODO Auto-generated method stub
super.onSizeChanged(w, h, oldw, oldh);
originalBitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
myCanvas = new Canvas(originalBitmap);
myThread.start();
}
public void drawMyBasicShapes() {
Paint basicsPaint = new Paint();
int canvasH, canvasW;
canvasH = myCanvas.getHeight();
canvasW = myCanvas.getWidth();
basicsPaint.setColor(Color.DKGRAY);
basicsPaint.setStyle(Style.STROKE);
basicsPaint.setStrokeWidth(4);
myCanvas.drawLine(0, canvasH - 60, canvasW, canvasH - 60,
basicsPaint);
myCanvas.drawBitmap(saveIcon, 0, canvasH - 50, null);
myCanvas.drawBitmap(deleteIcon, canvasW - 50, canvasH - 50, null);
}
}
public boolean onTouch(View v, MotionEvent event) {
float xPosition, yPosition;
xPosition = event.getX();
yPosition = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (yPosition < object.getHeight() - 60) {
startX = xPosition;
startY = yPosition;
myPath.moveTo(startX, startY);
} else {
if (xPosition > 0 && xPosition < saveIcon.getWidth()) {
this.setTitle("save");
saveMySignature();
} else if (xPosition > object.getWidth()
- deleteIcon.getWidth()) {
this.setTitle("delete");
}
}
break;
case MotionEvent.ACTION_MOVE:
if (yPosition < object.getHeight() - 60) {
finalX = xPosition;
finalY = yPosition;
if (finalX != startX && finalY != startY) {
myPath.quadTo(startX, startY, finalX, finalY);
}
startX = finalX;
startY = finalY;
break;
}
}
return true;
}
public void saveMySignature() {
canIDraw = false;
while (true) {
try {
myThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
myThread = null;
break;
}
try {
String path = Environment.getExternalStorageDirectory()
.getAbsolutePath();
File file = new File(path + "/segnature.png");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos;
fos = new FileOutputStream(file);
originalBitmap.compress(CompressFormat.PNG, 100, fos);
this.setTitle("image saved");
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}رب ارحمهما كما ربياني صغيرا
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…