2012-10-18 5 views
0

슬라이딩 퍼즐 (오른쪽 하단 모서리가 3x3/4x4/5x5 인 경우)을 만들고 있습니다. 그러나 나는 퍼즐 조각에서 프로그래밍 방식으로 이미지를 자르는 (어디서 sdcard 또는 응용 프로그램의 데이터베이스에서 자신의 갤러리에서로드됩니다) 시작할지 알아낼 수 없습니다. 나는 인터넷을 살펴 봤는데 아무 것도 정말로 도움이되지 못했습니다.퍼즐 방식으로 이미지를 프로그래밍 방식으로 편집하십시오.

이 이미지를 자르고 새 데이터베이스에 저장하고 (여전히 슬라이드 할 수있는) 가장 좋은 방법은 무엇입니까? 올바른 방향으로 밀어 넣으면됩니다.

+2

이미지를 자르지 않고도 이미지의 일부만 그릴 수 있습니다. [Canvas에 이미지 부분 그리기] (http://stackoverflow.com/questions/12946609/draw-portion-of-image-on) -canvas) –

+0

Heh. 이것은 "페이 스북 (Facebook)"채용 동기와 같이 들립니다 ... –

+0

페이 스북에 대해 아무것도 모릅니다, 미안합니다 – Olijf

답변

1

는 PhotoGaffe 응용 프로그램을 확인 .. 구글 코드 here에 미치는 가능합니다.
사용자는 3x3, 4x4, 5x5 및 6x6 퍼즐 중에서 선택할 수 있습니다.

이 작업을 수행하는 데 도움이 될 수 있습니다.

0

스트레이트에서 나는 지금 일하고있다!

cropped = Bitmap.createBitmap(main,x,y,width,height); 

타일 클래스는 매우 간단하다 :

Bitmap main = BitmapFactory.decodeResource(getResources(), R.drawable.puzzle); 

    if(main.getHeight() > main.getWidth()){ 
     rescalefactor =((float)screenHeight)/main.getHeight();} 
    else { 
     rescalefactor = ((float)screenWidth)/main.getWidth(); 
    } 

    main = Bitmap.createScaledBitmap(main,(int)(main.getWidth()*rescalefactor),(int)(main.getHeight()*rescalefactor), false); 

    Bitmap cropped; 

    LinearLayout layout[] = new LinearLayout[rows]; 

    int x=0,y=0,i=0,j=0,width=main.getWidth()/column,height=main.getHeight()/rows; 

    int count = 1; 

    for(i=0;i<rows;++i) 
    { 
     layout[i] = new LinearLayout(this); 

     for(j=0;j<column;++j) 
     { 
      cropped = Bitmap.createBitmap(main,x,y,width,height); 
      image[i][j] = new Tile(this); 
      image[i][j].setImageBitmap(cropped); 
      image[i][j].row =i;image[i][j].column =j; 
      image[i][j].setPadding(1, 1, 1, 1); 
      image[i][j].setOnClickListener(this); 
      image[i][j].setDrawingCacheEnabled(true); 
      image[i][j].setId(count); count++; 
      layout[i].addView(image[i][j]); 
      x += width; 
     } 

     x = 0; y += height; 
     root.addView(layout[i]); 
    } 

는 일이 정말 이루어집니다 라인입니다. 행과 열 필드 그냥 확장 된 이미지 뷰 :

public class Tile extends ImageView { 

    public int row, column; 
    public Tile(Context context) 
    { super(context);} 
} 
+0

예를 들어 3x3 = 9 등분으로 내 선택한 연령을 자르고 오른쪽 아래 모서리에있는 9 번째 이미지를 제거합니다. 미끄러질 수 있을까요? – Olijf

+0

글쎄, 당신의 질문은 내가 대답 한 비트 맵을 잘게하는 방법이었다. 제 대답을 받아주세요. 빈 타일을 만들려면 완전히 투명하면 간단하게 만듭니다. image [i-1] [j-1] .setAlpha (0x00); emptyTile = image [i-1] [j-1]; shuffleTiles(); – Simon

관련 문제