JAVA拼图中行列怎么变化的

JAVA拼图中行列怎么变化的,第1张

整个程序不就是最后的那个方法是关键。。。大概意思应该是通过 传值过来的行列值 ,然后和一开始设定的行列值比较,如果 n的值等于1 ,返回 TURE ,也就是要嘛图案移动了 一行,或者一列,

如果返回值是false 就是行列值没变

public static void cut(String srcImageFile, String descDir, int destWidth,

int destHeight) {

try {

Image img;

ImageFilter cropFilter;

// 读取源图像

BufferedImage bi = ImageIOread(new File(srcImageFile));

int srcWidth = bigetHeight(); // 源图宽度

int srcHeight = bigetWidth(); // 源图高度

if (srcWidth > destWidth && srcHeight > destHeight) {

Image image = bigetScaledInstance(srcWidth, srcHeight,

ImageSCALE_DEFAULT);

destWidth = 200; // 切片宽度

destHeight = 150; // 切片高度

int cols = 0; // 切片横向数量

int rows = 0; // 切片纵向数量

// 计算切片的横向和纵向数量

if (srcWidth % destWidth == 0) {

cols = srcWidth / destWidth;

} else {

cols = (int) Mathfloor(srcWidth / destWidth) + 1;

}

if (srcHeight % destHeight == 0) {

rows = srcHeight / destHeight;

} else {

rows = (int) Mathfloor(srcHeight / destHeight) + 1;

}

// 循环建立切片

// 改进的想法:是否可用多线程加快切割速度

for (int i = 0; i < rows; i++) {

for (int j = 0; j < cols; j++) {

// 四个参数分别为图像起点坐标和宽高

// 即: CropImageFilter(int x,int y,int width,int height)

cropFilter = new CropImageFilter(j 200, i 150,

destWidth, destHeight);

img = ToolkitgetDefaultToolkit()createImage(

new FilteredImageSource(imagegetSource(),

cropFilter));

BufferedImage tag = new BufferedImage(destWidth,

destHeight, BufferedImageTYPE_INT_RGB);

Graphics g = taggetGraphics();

gdrawImage(img, 0, 0, null); // 绘制缩小后的图

gdispose();

// 输出为文件

ImageIOwrite(tag, "JPEG", new File(descDir

+ "pre_map_" + i + "_" + j + "jpg"));

}

}

}

} catch (Exception e) {

eprintStackTrace();

}

}

以我现在的知识,我还不知道如何更简单的去做。

但如果以实现方式来讲,

一种是人工将这种形状

一种是 非常麻烦,需要程序进行大量计算。要对转换成 int 数值 有所了解

我想我只能提供你思路,因为具体实现是比较麻烦的

因为我不是讲语文的,不知道能不能说明白,比较意识流。。。

人工将的几种形状画出一种以指定颜色背景的半透明的图,,

比如方案为

■■■■□□■■■■□□■■■■

■■■□□■■■■■■□□■■■

■■■■□□■■■■□□■■■■

■■■□□■■■■■■□□■■■

■■□■□□■□□■□□■□■■

□□□□□□□□□□□□□□□□

□□■□□□□■■□□□□■□□

■■■■□□■■■■□□■■■■

■■■□□■■■■■■□□■■■

■■■■□□■■■■□□■■■■

■■■■□□■■■■□□■■■■

我想我画的试例图你明白了吧,是可以进行对接拼图的

一个比如说红色 44大小的,那么他转成int数据时就是

0xffff0000 0xffff0000 0xffff0000 0xffff0000

0xffff0000 0xffff0000 0xffff0000 0xffff0000

0xffff0000 0xffff0000 0xffff0000 0xffff0000

0xffff0000 0xffff0000 0xffff0000 0xffff0000

0x后面的ff表示是不透明的

第二个ff及后面的4个0表示颜色前2位是红中间是绿最后是蓝 这一点你可以用photoshop去查看

比如我上面第一张图的数据,转成int 数据时,就应该是

A B C D

1 0xffff0000 0xffff0000 0xffff0000 0xffff0000

2 0xffff0000 0xffff0000 0xffff0000 0x00ffffff

3 0xffff0000 0xffff0000 0xffff0000 0xffff0000

4 0xffff0000 0xffff0000 0xffff0000 0x00ffffff

5 0xffff0000 0xffff0000 0x00ffffff 0xffff0000

其中 D2 D4 及C5的位置是透明的0x00表示透明

说到这,也就是说,你应该能通过你生成的那几个指定的获得这几个对应的数据模板

之后你将你的要拼图的,按你设计好的模板拼图方式,生成块 注意,因为你要的效果是两个对接的,所以在生成的时候,也要注意,是对接的

如果你做到这一步,(或说成,你能想明白到这一步,哪怕不知道怎么做,没关系)

你这时应该能得到每块,和每块对应的是哪种模板

将这块转成int 数组形式的 数据文件。

之后将这个数据文件与对应的模板数据文件进行对应,

当发现你的模板的数据值为0x00ffffff时,就说明这个位置的颜色应该是透明的,这时因为你的数据与模版数据ID是相对应的,直接找到数据ID,将他的值改为0x00ffffff就可以了。

到这一步,你应该可以实现将所有分割后的,在数据上转换成了你想要的样子。

这时,你只要通过一些函数将数据文件转换成格式就行了。

因为我做的是手机方面的,你用的可能是J2SE吧,API我不是很熟,不能提供具体的方法。

1在Eclipse里打开项目,右键点击项目名,选择“Properties”;

2在d出的对话框中,选择“Java Build Path”,点击“Source”;

3点击“Link Source”,选择images文件夹,点击“Finish”;

4回到项目目录,images文件夹就复制到了项目目录下eclipse里。

以上就是关于JAVA拼图中行列怎么变化的全部的内容,包括:JAVA拼图中行列怎么变化的、请问java怎样实现拼图游戏图片的载入,就是图片怎么分割成一小张一小张的,请详讲。谢谢,最好有代码、用java做拼图游戏,怎么把图片切割成不规则形状等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10084243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存