9宫格拼图

选张图片做成9宫格拼图

今天要学习一个拼图项目。

目标是传入一张图片,然后将它分成9份,去掉一份,鼠标点击进行拼图。

源文件结构很简单

第一步、新建项目

这一步没什么好说的,新建一个项目就跟源文件结构一样了

第二步、页面布局(.xaml文件)

看下源文件

控件有 DockPanel Grid Button三个然后设置了Grid有三列和三行。DockPannel暂时不知道有什么用,所以我先不忙加。然后我就报错了

原来 xaml是用的xml格式。button外面没有双标签包围,不能识别,所以报错。所以外面再加个标签包裹就行了,如果加DockPanel标签就和源文件一样了,此处为了明白DockPane有什么用,所以还是用Grid,看等会儿会不会报错。我现在的代码是

第二步、编写点击按钮选图片的功能

这个帖子上周就开始写了,但是做了一半又去研究c++了。c++研究了一段时间,忽然明白我为什么要编程了。我编程不是对计算机有兴趣,不是为了0和1。我学计算机和程序只是为了做东西。所以又回过头来继续写这个系列,之后的内容我不会再抓细节,有些东西,能看懂就行了。记不住也没关系,要用的时候再查就是了。将项目做出来之后,我还要将它做成我喜欢的样子,而不是做成跟源代码一样。

点击按钮要做两件事

1、弹出文件选择对话框,选择图片。

2、选择图片后生成拼图

下面是选择图片的代码

选择图片

  

生成拼图 第一步是把图片分成9块,并填充相应区域的图像

这个有点复杂,源码用了很多方法,我习惯拆出来作为一个类单独写。

   /// <summary>
    /// 拼图生成类
    /// 传入一张图片 生成一个9*9的图片集合
    /// </summary>
    public class PuzzleForImage
    {
        BitmapImage     _image;                                             //原图片
        public List<Rectangle> initialUnallocatedParts = new List<Rectangle>();//要返回的拼图集合
        /// <summary>
        /// 新建对象时传入原图片
        /// </summary>
        /// <param name="image"></param>
        public PuzzleForImage(BitmapImage image)
        {
            _image = image;       //创建拼图
        }
  }

第一步:写个子方法,根据起点和图片宽高绘制矩形。然后调用9次,得到整个拼图集合

第二步:将9张中的8张拼图随机排列,这里选前八张

第三步:再添加块空白的拼图

第四步:添加鼠标点击移动事件

到这一步,源码部分就结束了,自己添加了个判断成功的代码 在方块中的点击事件中执行。

下面是我的代码。

MainWindow.xaml.cs

PuzzleForImage.cs

运行效果:

还存在的问题:

1、现在图片会被拉伸,暂时没想到好的办法。

2、会随机一些拼不出来的拼图

------------------------------分割线2016-8-3 16:47---------------------------------

图片拉伸问题已经解决

@曙光闪现
[quote]图片拉伸应该只能通过限制窗体的缩放按图片的比例缩放了。之前搞过9path原理就是类似这个九宫格[/quote]

下面是代码

设置宽高

更新了MainWindow.xaml.cs文件 和 MainWindow.xaml文件

下面是最新的代码

MainWindow.xaml.cs

MainWindow.xaml

PuzzleForImage.cs没变还是上面那个

时间: 2024-10-05 01:29:36

9宫格拼图的相关文章

WPF学习系列 游戏-选张图片做成9宫格拼图

今天要学习一个拼图项目. 目标是传入一张图片,然后将它分成9份,去掉一份,鼠标点击进行拼图. 源文件结构很简单 第一步.新建项目 这一步没什么好说的,新建一个项目就跟源文件结构一样了 第二步.页面布局(.xaml文件) 看下源文件 控件有 DockPanel Grid Button三个然后设置了Grid有三列和三行.DockPannel暂时不知道有什么用,所以我先不忙加.然后我就报错了 原来 xaml是用的xml格式button外面没有双标签包围,不能识别,所以报错.所以外面再加个标签包裹就行了

安卓项目开发实战(2)--星座展示12宫格

好多日子没有写安卓了,今天继续我未完成的安卓项目.今天主要实现星座展示的12宫格效果. 1.星座图片 找好12星座的图片,参见工程代码下面的res/drawable目录 2.星座枚举类 建立这个枚举类是很有必要的,可以使我们 的代码更加清晰,同时避免了魔法数字的情况. 枚举类的代码如下: package com.liuc.constatntEnum; import com.liuc.R; /** * 星座枚举 * * @author Administrator * */ public enum

jquerymobile创建9宫格事例

<html> <head> <title>9宫格</title> <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0" /> <script type="text/javascript" src="http://code.jquery.com/jquery-1.

9宫格题目:css完成9宫格,鼠标移动高亮

今天和大家分享一个在群里看到的一个面试题目.大致意思就是 一个9宫格,鼠标移上去要有高亮效果(只能使用css),然后自己是尝试了一下. 先上效果图 当你看到这个效果图的时候,建议你,不要看下面,先自己尝试着写写看,会很有趣的. -------------------------------------------------分割线------------------------------------------------------- 先上代码: HTMl 1 <div class="

一个iOS图片选择器的DEMO(实现图片添加,宫格排列,图片长按删除,以及图片替换等功能)

在开发中,经常用到选择多张图片进行上传或作其他处理等等,以下DEMO满足了此功能中的大部分功能,可直接使用到项目中. 主要功能如下: 1,图片九宫格排列(可自动设置) 2,图片长按抖动(仿苹果软件删除时,图标抖动效果),可进入删除状态,再次单击进入普通状态 3,图片设置最大上限,加号按钮自动隐藏 4,已选图片可单击进行重新选择 5,无需代理,直接调用对应属性就可获取所有图片,并与显示顺序保持一致 效果图如下: 1 // 2 // SZAddImage.h 3 // addImage 4 // 5

一个全等四宫格实现的多种方法

方法一:用float方法实现 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>一个全等四宫格的实现</title> <style> .parent{ background-color:#fff; width: 500px; height: 400px; margin-left: -10px; margin-top: -10px;

MUI组价五:开关、底部选项卡、9宫格和分页

1.switch(开关) mui提供了开关控件,点击滑动两种手势都可以对开关控件进行操作,UI如下:默认开关控件,带on/off文字提示,打开时为绿色背景,基本class类为.mui-switch..mui-switch-handle,DOM结构如下: <div class="mui-switch"> <div class="mui-switch-handle"></div> </div> 若希望开关默认为打开状态,只

Android自定义多宫格解锁控件

在此之前,一直在想九宫格的实现方法,经过一个上午的初步研究终于完成了一个简单的N*N的宫格解锁组件,代码略显粗糙,仅仅做到简单的实现,界面等后期在做优化,纯粹是学习的目的,在算法上有点缺陷,如果有错误或者更好的方法,欢迎提出,相互学习.先来看一下预览图 九宫格效果展示 N=3 手指抬起 N=4 手指没有抬起 其他的废话不多说了,直接开始吧..... 实现步骤 设置声明属性attrs.xml文件 创建SeniorPoint.java文件 创建View并重写其中的几个重要方法 设置触摸事件,并进行数

九宫格问题、16宫格

九宫格(Lo Shu Square)问题 将1到9的数字按照一定方式填入九宫格内.使得每一列.每一行以及两条对角线上的值都相等. 全排列(递归) 首先,用枚举法,生成各种(3, 3)的二维数组: def perm(li): """递归实现列表的全排列 如果输入是[1],那么返回[[li],]表示有一种排列 如果输入是[1, 2],期望的返回的是[[1, 2], [2, 1]],这是要之后的递归实现的 """ if len(li) <= 1: