2012-10-18 40 views
0

我正在制作滑动拼图(3x3/4x4/5x5,右下角切除)。然而,我不知道从哪里开始编程切割图像(这将从自己的画廊在SD卡或从应用程序数据库加载)拼图碎片。 我一直在寻找互联网,没有什么帮助我。以编程方式编辑拼图使用的图像

什么是最好的方式来剪切此图像并将其存储在一个新的数据库(并仍然可以滑动它们)?只是在正确的方向推动将不胜感激。

+2

您不必切割它,只需绘制图像的一部分:[在画布上绘制图像部分](http://stackoverflow.com/questions/12946609/draw-portion-of-image-on -canvas) –

+0

Heh。这听起来像是“Facebook”招聘挑战... –

+0

我对facebook一无所知,对不起 – Olijf

回答

1

检查PhotoGaffe应用.. 及其对谷歌代码here可用。
它允许用户选择3x3,4x4,5x5和6x6拼图。

这可能会帮助你完成你的任务。

0

直接从我目前正在工作的东西!

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]); 
    } 

这行,而且工作真的做:

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

磁砖类是超级简单。只是一个扩展ImageView的行和列字段:

public class Tile extends ImageView { 

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

这是否会将我选定的年龄段缩小为3x3 = 9等分并删除右下角的第9张图片,能够滑动? – Olijf

+0

那么,你的问题是如何砍掉我已经回答的位图。请接受我的回答。要制作空白瓷砖,我只需制作完全透明。图像〔I-1] [j-1] .setAlpha(0×00); emptyTile = image [i-1] [j-1]; shuffleTiles(); – Simon