⑴ java实现整数拆分算法,例如输入一个4会输出4 , 3 1, 2 2, 2 1
importjava.util.Scanner;//输入的
publicclassABS{//外面建的点java的文件名必须和这个一样
publicstaticinta[]=newint[12000];
staticvoidp(intn,intindex)//搜索
{
inti;
if(n<=0)//当n为0的时候输出这种情况
{
System.out.print(a[0]);
for(i=1;i<index;System.out.print("+"+a[i++]));
System.out.print(" ");
return;//返回到函数调用的地方
}
for(i=index>0&&(n>=a[index-1])?a[index-1]:n;i>0;i--)
{//如果数组下标大于0且n剩余的值大于等于上一个的值,那么i就等于上一个的值,否则i就等于n
a[index]=i;
p(n-i,index+1);//在次调用
}
}
publicstaticvoidmain(String[]args){
Scannerin=newScanner(System.in);//从控制台中读取输入数据
intt;
t=in.nextInt();//输入一个整数
if(t>=10000)
{
System.out.println("你输入的数据超过1万,太大咯!!!");
return;
}
p(t,0);
in.close();//关闭输入
return;
}
}
这个只是可以实现10000 以内的数, 如果想大一点 就把数组开大一点局可以了!
⑵ java 把一个大图切割成100份放入byte[],然后取上面10块byte[]数组进行拼接
我是初学者,你看看有帮助不
public static void merge() throws IOException //文件拼接
{
Vector<FileInputStream>vector =new Vector<FileInputStream>();
for (int x=1;x<18 ;x++ )//我切了17份
{
vector.add(new FileInputStream("e:\\part\\"+ x +".part"));
}
Enumeration<FileInputStream> e=vector.elements();
SequenceInputStream sis =new SequenceInputStream(e);
FileOutputStream fos=new FileOutputStream("e:\\刘欢 - 情怨.mp3") ;
byte [] by =new byte [1024*1024];
int len =0;
while ((len=sis.read(by))!=-1)
{
fos.write(by,0,len);
}
fos.close();
sis.close();
⑶ Java的图像算法
//没听懂你的需求,能更清楚一些吗?
我以前的一个程序使用BufferedImage读取图像像素点的RGB值,例子在下面。
你从例子中了解一下用一个整数表示RGB颜色的方法。然后用setRGB方法满足你的要求。
方法:
java.awt.image.BufferedImage
public int getRGB(int x,int y)
返回默认 RGB 颜色模型 (TYPE_INT_ARGB) 和默认 sRGB 颜色空间中的整数像素。如果此默认模型与该图像的 ColorModel 不匹配,则发生颜色转换。在使用此方法所返回的数据中,每个颜色分量只有 8 位精度。
public void setRGB(int x, int y,int rgb)
将此 BufferedImage 中的像素设置为指定的 RGB 值。假定该像素使用默认 RGB 颜色模型、TYPE_INT_ARGB 和默认 sRGB 颜色空间。对于具有 IndexColorModel 的图像,则选择最接近的颜色的索引。
参数:
x - 要设置的像素的 X 坐标
y - 要设置的像素的 Y 坐标
rgb - RGB 值
例子:(获取RGB值)---了解一下用一个整数表示RGB颜色的方法
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;
public class Test{
public static void main(String args[]) {
int[] rgb = new int[3];
File file = new File("a.bmp");
BufferedImage bi=null;
try{
bi = ImageIO.read(file);
}catch(Exception e){
e.printStackTrace();
}
int width=bi.getWidth();
int height=bi.getHeight();
int minx=bi.getMinX();
int miny=bi.getMinY();
System.out.println("width="+width+",height="+height+".");
System.out.println("minx="+minx+",miniy="+miny+".");
for(int i=minx;i<width;i++){
for(int j=miny;j<height;j++){
//System.out.print(bi.getRGB(jw, ih));
int pixel=bi.getRGB(i, j);
rgb[0] = (pixel & 0xff0000 ) >> 16 ;
rgb[1] = (pixel & 0xff00 ) >> 8 ;
rgb[2] = (pixel & 0xff );
System.out.println("i="+i+",j="+j+":("+rgb[0]+","+rgb[1]+","+rgb[2]+")");
}
}
}
}
⑷ 图像分割最好方法
1.基于阈值的分割方法
阈值法的基本思想是基于图像的灰度特征来计算一个或多个灰度阈值,并将图像中每个像素的灰度值与阈值作比较,最后将像素根据比较结果分到合适的类别中。因此,该方法最为关键的一步就是按照某个准则函数来求解最佳灰度阈值。
阈值法特别适用于目标和背景占据不同灰度级范围的图。图像若只有目标和背景两大类,那么只需要选取一个阈值进行分割,此方法成为单阈值分割;但是如果图像中有多个目标需要提取,单一阈值的分割就会出现作物,在这种情况下就需要选取多个阈值将每个目标分隔开,这种分割方法相应的成为多阈值分割。
2.基于区域的图像分割方法
基于区域的分割方法是以直接寻找区域为基础的分割技术,基于区域提取方法有两种基本形式:一种是区域生长,从单个像素出发,逐步合并以形成所需要的分割区域;另一种是从全局出发,逐步切割至所需的分割区域。
分水岭算法
分水岭算法是一个非常好理解的算法,它根据分水岭的构成来考虑图像的分割,现实中我们可以想象成有山和湖的景象,那么一定是水绕山山围水的景象。
分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是测地学上的拓扑地貌,图像中每一点像素的灰度值表示该点的海拔高度,每一个局部极小值及其影响区域称为集水盆,而集水盆的边界则形成分水岭。分水岭的概念和形成可以通过模拟浸入过程来说明。在每一个局部极小值表面,刺穿一个小孔,然后把整个模型慢慢浸入水中,随着浸入的加深,每一个局部极小值的影响域慢慢向外扩展,在两个集水盆汇合处构筑大坝,即形成分水岭。
⑸ 如何在Java中进行图片剪裁 疯狂JAVA
packagetest;
importjava.awt.Color;
importjava.awt.Graphics2D;
importjava.awt.Image;
importjava.awt.geom.AffineTransform;
importjava.awt.image.AffineTransformOp;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjava.nio.Buffer;
importjavax.imageio.ImageIO;
importjavax.imageio.stream.ImageOutputStream;
/**
*裁剪、缩放图片工具类
*
*@authorCSDN没有梦想-何必远方
*/
publicclassImgUtils{
/**
*缩放图片方法
*
*@paramsrcImageFile
*要缩放的图片路径
*@paramresult
*缩放后的图片路径
*@paramheight
*目标高度像素
*@paramwidth
*目标宽度像素
*@parambb
*是否补白
*/
publicfinalstaticvoidscale(StringsrcImageFile,Stringresult,
intheight,intwidth,booleanbb){
try{
doubleratio=0.0;//缩放比例
Filef=newFile(srcImageFile);
BufferedImagebi=ImageIO.read(f);
Imageitemp=bi.getScaledInstance(width,height,bi.SCALE_SMOOTH);//bi.SCALE_SMOOTH
//选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。
//计算比例
if((bi.getHeight()>height)||(bi.getWidth()>width)){
doubleratioHeight=(newInteger(height)).doubleValue()
/bi.getHeight();
doubleratioWhidth=(newInteger(width)).doubleValue()
/bi.getWidth();
if(ratioHeight>ratioWhidth){
ratio=ratioHeight;
}else{
ratio=ratioWhidth;
}
AffineTransformOpop=newAffineTransformOp(AffineTransform//仿射转换
.getScaleInstance(ratio,ratio),null);//返回表示剪切变换的变换
itemp=op.filter(bi,null);//转换源BufferedImage并将结果存储在目标
//BufferedImage中。
}
if(bb){//补白
BufferedImageimage=newBufferedImage(width,height,
BufferedImage.TYPE_INT_RGB);//构造一个类型为预定义图像类型之一的
//BufferedImage。
Graphics2Dg=image.createGraphics();//创建一个
//Graphics2D,可以将它绘制到此
//BufferedImage中。
g.setColor(Color.white);//控制颜色
g.fillRect(0,0,width,height);//使用Graphics2D上下文的设置,填充Shape
//的内部区域。
if(width==itemp.getWidth(null))
g.drawImage(itemp,0,(height-itemp.getHeight(null))/2,
itemp.getWidth(null),itemp.getHeight(null),
Color.white,null);
else
g.drawImage(itemp,(width-itemp.getWidth(null))/2,0,
itemp.getWidth(null),itemp.getHeight(null),
Color.white,null);
g.dispose();
itemp=image;
}
ImageIO.write((BufferedImage)itemp,"JPEG",newFile(result));//输出压缩图片
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*裁剪图片方法
*
*@parambufferedImage
*图像源
*@paramstartX
*裁剪开始x坐标
*@paramstartY
*裁剪开始y坐标
*@paramendX
*裁剪结束x坐标
*@paramendY
*裁剪结束y坐标
*@return
*/
(BufferedImagebufferedImage,
intstartX,intstartY,intendX,intendY){
intwidth=bufferedImage.getWidth();
intheight=bufferedImage.getHeight();
if(startX==-1){
startX=0;
}
if(startY==-1){
startY=0;
}
if(endX==-1){
endX=width-1;
}
if(endY==-1){
endY=height-1;
}
BufferedImageresult=newBufferedImage(endX-startX,endY-startY,
4);
for(intx=startX;x<endX;++x){
for(inty=startY;y<endY;++y){
intrgb=bufferedImage.getRGB(x,y);
result.setRGB(x-startX,y-startY,rgb);
}
}
returnresult;
}
publicstaticvoidmain(String[]args)throwsIOException{
Fileinput=newFile("input.jpg");
BufferedImageimg=ImageIO.read(input);
cropImage(img,10,10,20,20);
Fileoutput=newFile("output.jpg");
ImageIO.write(img,"jpg",output);
}
}
⑹ 寻求一个面板切割最优解的算法,可以用C、C++或Java编写。寻求高手帮助,如果算法正确高效,将再补10分
这时一个多目标组合优化问题,NP完全问题,没有那么简单,属于世界性的难题。可以使用遗传算法、粒子群算法等模拟演化算法求解得到一个近优解,没有算法能保证得到一个最优解。
⑺ 怎么用java切割出不规则图形的图片
//用基本图形拼呀
import java.awt.Graphics;
import javax.swing.*;
public class IrregulaShape extends JPanel{
@Override
public void paint(Graphics g) {
super.paint(g);
g.drawRect(100, 50,100, 100);
g.drawArc(100, 25, 50, 50, 0, 180);
//g.fillRect(100, 50, 100, 100);
//g.fillOval(100, 25, 50, 50);
}
public static void main(String[] args) {
JFrame jFrame = new JFrame("不规则的!");
IrregulaShape j = new IrregulaShape();
jFrame.add(j);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setSize(500,500);
jFrame.setLocationRelativeTo(null);
jFrame.setVisible(true);
}
}
⑻ 用java如何将一张图片切割成九块,然后保存在自己的系统盘里
用bufferImage类的SubImage方法,切割,然后用ImageIO的静态方法,write写出到文本。
⑼ 用java做拼图游戏,怎么把图片切割成不规则形状
以我现在的知识,我还不知道如何更简单的去做。
但如果以实现方式来讲,
一种是人工将图片这种形状
一种是 非常麻烦,需要程序进行大量计算。要对图片转换成 int 数值 有所了解
我想我只能提供你思路,因为具体实现是比较麻烦的
因为我不是讲语文的,不知道能不能说明白,比较意识流。。。
人工将图片的几种形状画出一种以指定颜色背景的半透明的图,,
比如方案为
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■□■□□■□□■□□■□■■
□□□□□□□□□□□□□□□□
□□■□□□□■■□□□□■□□
■■■■□□■■■■□□■■■■
■■■□□■■■■■■□□■■■
■■■■□□■■■■□□■■■■
■■■■□□■■■■□□■■■■
我想我画的试例图你明白了吧,是可以进行对接拼图的
一个比如说红色图片 4*4大小的,那么他转成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我不是很熟,不能提供具体的方法。
⑽ 如何用java实现切割一张图片
BufferedImage类有一个getSubimage()方法,以下来自API
public BufferedImage getSubimage(int x,
int y,
int w,
int h)
返回由指定矩形区域定义的子图像。返回的 BufferedImage 与源图像共享相同的数据数组。
参数:
x - 指定矩形区域左上角的 X 坐标
y - 指定矩形区域左上角的 Y 坐标
w - 指定矩形区域的宽度
h - 指定矩形区域的高度
返回:
BufferedImage,它是此 BufferedImage 的子图像。
抛出:
RasterFormatException - 如果指定区域不包含在此 BufferedImage 中