fudoctor / Image / Java图像图形处理11. 2

0 0

   

Java图像图形处理11. 2

2012-10-19  fudoctor

11. 2 绘制图形的颜色及其他

在上一节我们简要介绍了几何图形的绘制,本节主要讨论图形的颜色及绘制模式。

11.2.1 颜色类(Color

Java中颜色的设置采用与设备无关的方式,允许用户指定任何需要的颜色,java.awt.Color类定义了一系列常量用以指定常用的颜色,也可以通过Color类的构造方法生成所需要的颜色对象。

1. 常用的构造方法

我们可以使用如下的构造方法构造颜色对象:

1) Color(int redint greenint blue) 使用红、绿、蓝三个整数表示混合后的颜色,red,grenn,blue取值范围在0~255之间。如new Color(255100100)可表示亮红色。

2) Color(int rgbValue) 采用红、绿、蓝构成的一个整数来表示颜色。一般常写成16进制形式。如0xffffff表示白色(最亮)。

3) Color(float redfloat greenfloat blue) 使用三浮点数指定红、绿、蓝三个分量表示颜色。取值范围在0.0~1.0之间。

2.类常量

Color类提供了一些常量来指定颜色,下表11.1列出了类常量及所表示的颜色。

11.1 颜色的类常量表

常数

颜色

常数

颜色

blackBLACK

黑色

magenta MAGENTA

洋红色

blueBLUE

蓝色

orange ORANGE

桔黄色

cyan CYAN

青色

pinkPINK

粉红色

darkGray DARK_GRAY

深灰色

red RED

红色

gray GRAY

灰色

white WHITE

白色

green GREEN

绿色

yellow YELLOW

黄色

lightGray LIGHT_GRAY

浅灰色

3. 常用方法

1) public int getRed() 返回颜色中包含红的成份。

2) public int getGreen() 返回颜色中包含绿的成份。

3) public int getBlue() 返回颜色中包含蓝的成份。

4) public static int HSBtoRGB(float huefloat saturationfloat brightness) 返回RGB值。

5) public static float[] RGBtoHSB(int redint greenint bluefloat values[]) 返回一个与RGB值相应的HSB值的浮点数组。若values不为空(null),即values[0]表示色相、values[1]表示饱和度、values[2]表示亮度。

注意:HSB(hue-saturation-brightness)是另一种指定颜色的方式,色相(hue)大约有红色、橙色、黄色、绿色、蓝色、靛青、紫色等;饱和度(staturation)代表了相应的色相的深浅或鲜艳程度;亮度(brightness)表示明暗。它们都是介于0.0~1.0之间。

下边我们看一个示例。

11.10 使用applet 绘制如图11-10所示奥运五环。

11-10 11.10运行屏幕

程序参考代码如下:

/*这是一个设置绘图颜色的示例程序

*程序的名称是:ColorExam11_10.java

*/

import java.awt.*;

import javax.swing.*;

public class ColorExam11_10 extends JApplet

{

public void paint(Graphics g)

{

g.setColor(Color.cyan);

g.fillRect(10,10,250,150); //填充矩形

g.setColor(Color.blue);//取得颜色

g.drawOval(50,50,50,50);

g.setColor(Color.black);//取得颜色

g.drawOval(105,50,50,50);

g.setColor(Color.red);//取得颜色

g.drawOval(160,50,50,50);

g.setColor(Color.orange);//取得颜色

g.drawOval(75,76,50,50);

g.setColor(Color.green);//取得颜色

g.drawOval(130,76,50,50);

}

}

在绘制图形的过程中,我们一般使用绘图类的setColor()方法设置新的绘制颜色,使用getColor()方法获得当前的绘制颜色。

11.2.2 调色板

在一些常用的绘图工具中,一般都提供了调色板的功能。在Java中,我们可以使用javax.swing.包中的JColorChooser类来实现调色板的功能。JColorChooser 提供一个用于允许用户操作和选择颜色的控制器窗格。下边简要介绍一下JColorChooser类的功能。

1. 构造方法

构建对象的方法如下:

1JColorChooser() 创建初始颜色为白色的颜色选取器窗格。

2JColorChooser(Color initialColor) 创建具有指定初始颜色的颜色选取器窗格。

3JColorChooser(ColorSelectionModel model) 创建具有指定 ColorSelectionModel 颜色选取器窗格。

2. 类常量

1CHOOSER_PANELS_PROPERTY 其值为"chooserPanels",表示选择器窗格属性名。

2 PREVIEW_PANEL_PROPERTY 其值为"previewPanel",表示预览窗格属性名。

3SELECTION_MODEL_PROPERTY 其值为"selectionModel",表示选择模型属性名。

3. 常用方法

1public Color getColor() 获取颜色选取器的当前颜色值。

2) public void setColor(int r,int g,int b) 将颜色选取器的当前颜色设置为指定的 RGB 颜色。

3) public static Color showDiaglog(Component component,String title,Color initColor)显示颜色选取器窗格并返回选取的颜色。其中参数component表示该对话窗格所依赖的组件,title设置窗格标题,initColor设置初置的颜色。

showDialog()方法是一个类方法,在程序可以使用它来创建一个颜色对话框,选取所需要的颜色。

下边我们举一个例子说明调色板的应用。

11.11 设计如图11-11的用户屏幕,在界面上安排一个容器组件显示信息;安排一个按钮,当单击此按钮时弹出调色板对话框,选中所需颜色后,即以该颜色作为显示容器的背景色。

11-11 11.11运行界面

程序参考代码如下:

/*这是一个使用调色板选取绘图颜色的示例程序

*程序的名称是:ColorExam11_11.java

*/

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

class ColorExam11_11 extends JFrame implements ActionListener

{

JButton bt1=new JButton("改变颜色");

JPanel p1=new JPanel();

public ColorExam11_11()

{

Container pane=this.getContentPane();

pane.setLayout(new FlowLayout());

pane.add(p1);

pane.add(bt1);

p1.add(new JLabel("这是一个改变对象背景的示例!"));

bt1.addActionListener(this);

setSize(200,200);

setVisible(true);

setTitle("演示颜色对话框");

setDefaultCloseOperation(3);

}

public static void main(String args[])

{

new ColorExam11_11();

}

public void actionPerformed(ActionEvent e)

{

Color c=JColorChooser.showDialog(null,"调色板",p1.getBackground());

p1.setBackground(c);

}

}

请大家运行上述程序,看一下调色板的应用。

11.2.3 绘图模式

一般情况下,如果在同一位置多次绘制图形时,最近绘制的图形将覆盖原有的图形。

Graphics类中提供了以下两个方法来设置绘图模式(paintmode)

1void setXORMode(Color xorColor) xorColor指定了绘制图形时与窗口进行异或操作的颜色,使新绘制的图形以异或操作的方式加入到容器中。异或模式的优点是无论使用什么颜色绘制,新的图形总是可见的。

2void setPaintMode() 覆盖模式,最新的图形总是覆盖原有的图形。

绘图模式可以控制被绘制的图形在容器上的显示方式,我们可以通过设置绘图模式来决定图形重叠部分之间的运算。

下边举一个简单的示例,看一下不同模式的绘制结果。

11.12 applet容器中,绘制3个填充矩形,其中两个矩形以两种模式绘制并覆盖另一个矩形的一部分,对比一下绘制效果。

程序参考代码如下:

/*这是一个使用不同模式绘制图形的示例程序

*程序的名称是:GriphicExam11_12.java

*/

import java.awt.*;

import java.applet.*;

public class GriphicExam11_12 extends Applet

{

public void paint(Graphics g)

{

Color color = new Color(0, 255, 0);

g.setColor(color); //前景绿色

g.fillRect(50, 10, 100, 50); //填充矩形

g.setColor(Color.red); //设置红色

g.fillRect(10,10,60, 30); //填充矩形

g.setXORMode(Color.yellow); //设置异或绘制模式

g.fillRect(120,10,100,30); //填充的矩形

}

}

请大家运行程序,看一下两种不同模式的绘制有什么区别。

11.2.4 画笔

图形是由画笔绘制的,在前边我们讨论了如何改变画笔的颜色。下边我们看一下如何设置画笔的大小和样式。

改变图形的样式时,需要用到java.awt.BasicStroke类,它可定义直线的宽度、连接的样式、直线末端的样式以及虚线的样式等。下边简要介绍一下该类的功能及应用。

1.构造方法

构造 BasicStroke对象常用的方法如下:

1BasicStroke(float width)

2BasicStroke(float width, int cap, int join)
3
BasicStroke(float width, int cap, int join, float miterlimit)
4
BasicStroke(float width, int cap, int join, float miterlimit, float[] dash, float dash_phase)

参数说明如下:

(1) width指定直线的宽度;

(2) cap 用来定义开放直线末端的样式,可以取BasicStroke类常量;

(3) join 用来定义两段直线交会的连接样式,可以取BasicStroke类常量;

(4) miterlimit 修剪连接点限定;

(5) dash 为虚线的样式,该数组内的值为画点与空白的交错值。例如,dash{123},则代表画1个点,空白2个点,然后再画3个点,……

(6) dash_phase 为前面虚线样式数组的起始索引(通常由0开始)

2.类常量

1) CAP_BUTT 其值为0,表示线段的末端不加修饰。

2) CAP_ROUND 其值为1,表示在线段末端加上圆心位于端点半径等于画笔宽度一半的圆形。

3) CAP_SQUARE 其值为2,表示线段末端加上中心位于端点、长和宽等于画笔宽度的正方形。

4) JOIN_BEVEL 其值为2,表示两线交会不加任何修饰。

5) JOIN_MITER 其值为0,表示两线交会将扩展路径线段的外边缘,直到它们连接在一起。

6) JOIN_ROUND其值为1,表示两线交会通过舍去半径为线长的一半的圆角,将路径线段连接在一起。

3.常用方法

1public float getLineWidth() 返回线条的宽度。

2public int getEndCap() 返回端点的 cap 样式。

3public int getLineJoin() 返回线条连接样式。

4public float getMiterLimit() 返回斜接的限制。

5public float[] getDashArray() 返回表示虚线线段长度的数组。

6public float getDashPhase() 返回当前虚线相位。虚线相位是在用户坐标中指定的一个距离,它表示虚线模式中的偏移量。

下边我们看一个例子说明画笔的应用。

11.13 在屏幕上分别绘制如图11-12上的线段,测试一下画笔的应用。

11-12 11.13执行结果

程序的基本设计思想如下:创建一个框架容器,在该容器上绘制线段,第一个三角形采用实粗线绘制,使用圆形端点,线段连接不加修饰;第二个三角形采用细虚线绘制,使用圆形端点,线段扩展连接在一起,修剪连接点限定为10,虚线以先画8个点、空白2个点,再画2个点的方式,从头重复进行。

程序参考代码如下:

/*这是画笔应用的一个示例

*程序的名称:PenExam11_13.java

*/

import java.awt.*;

import java.awt.geom.*;

import javax.swing.*;

public class PenExam11_13 extends JFrame

{

public PenExam11_13()

{

super("演示画笔应用示例");

setSize(200,100);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public void paint(Graphics g) //重写绘图方法paint()

{

super.paint(g);

Graphics2D g2d = (Graphics2D)g; // 强制转换为Graphics2D引用

int xp[]={50,10,90,50}; //定义x坐标点

int yp[]={30,70,70,30}; //定义y坐标点

GeneralPath path1=new GeneralPath(); // 构建GeneralPath类对象path1

path1.moveTo(xp[0],yp[0]); // 将起始点加入路径

for(int i=1; i<xp.length;i++) path1.lineTo(xp[i],yp[i]);//坐标点加入路径

GeneralPath path2=new GeneralPath(); // 构建GeneralPath类对象path2

path2.moveTo(xp[0]+100,yp[0]); // 将起始点加入路径

for(int i=1; i<xp.length;i++) path2.lineTo(xp[i]+100,yp[i]);//坐标点加入路径

BasicStroke wideLine=new BasicStroke(4,1,2);//线宽为4,末端圆形,两线交汇不修饰

g2d.setStroke(wideLine);//设置画笔

g2d.draw(path1); //绘制第1个三角形

float dash[]={8,4,2}; //定义虚线样式

BasicStroke dashLine=new BasicStroke(1,1,0,10,dash,0);//定义画笔

g2d.setStroke(dashLine); //设置画笔

g2d.draw(path2); //绘制第2个三角形

} //绘图方法结束

public static void main(String args[]) //主方法main()

{

new PenExam11_13();

} //主方法main()结束

}

11.2.5 其他

在实际的绘制图形应用中,往往还需要对绘制的物体形状进行一些色彩的修饰,使之更加逼真,这就涉及到颜色的变化和填充的纹理问题。Java提供了相关的类来解决这些问题,下边我们简要介绍一下颜色渐变和纹理填充类的功能。

1GradientPaint

该类提供了使用线性颜色渐变模式填充所绘图形的方法。如果在用户空间指定了点P1 的颜色C1,点P2的颜色为C2,则P1P2连接线段上的颜色是逐渐地从C1变化到C2的。P1P2线段的延长线上的点可以按以下两种方式之一进行着色:如果渐变是周期性的,颜色C1C2之间来回循环;如果渐变是非周期性的,那么P1一边的点有固定的颜色C1,而P2一边的点有固定的颜色C2

1)构造方法

构造GradientPaint对象的方法如下:

(1) GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2)

(2) GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, boolean cyclic)

(3) GradientPaint(Point2D pt1, Color c1, Point2D pt2, Color c2)

(4) GradientPaint(Point2D pt1, Color c1, Point2D pt2, Color c2, boolean cyclic)

用上边的方法可以构造一个GradientPaint对象,其中:

x1,y1x2,y2pt1pt2分别代表绘制屏幕上的一个点;

c1c2分别代表一种颜色;

cyclic是一个逻辑值,说明创建的对象是周期性的还是非周期性的;若为true 则对象是周期性的,否则是非周期性的。

2)常用方法

(1) Color getColor1() 返回点 P1 的颜色 C1

(2) Color getColor2() 返回点 P2 的颜色 C2

(3) Point2D getPoint1() 返回着第一种颜色的点 P1 的副本。

(4) Point2D getPoint2() 返回着第二种颜色的点 P2 的副本。

(5) boolean isCyclic() 测试是否是周期性渐变方式。

2TexturePaint

该类提供一种用被指定为BufferedImage的纹理填充所绘图形的方式。由于 BufferedImage数据是由TexturePaint对象所复制,所以BufferedImage对象的大小应该小一些。在构造时,纹理定位在用户空间中指定的 Rectangle2D对象的左上角。

构造TexturePaint对象的方法如下:

TexturePaint(BufferedImage texture, Rectangle2D rect)

其中:texture是一个用于绘制的纹理的BufferedImage 对象;rect是用户空间中用于定位和复制纹理的Rectangle2D对象。

TexturePaint对象常用的方法如下:

1public BufferedImage getImage() 返回用于填充纹理BufferedImage对象。

2public Rectangle2D getAnchorRect() 返回定位并复制纹理的Rectangle2D对象。

3BufferedImage

该类描述具有可访问图像数据缓冲区的 Image

1)构造方法

构建BufferedImage对象的常用构造方法如下:

(1) public BufferedImage(int width, int height,int imageType)

(2) public BufferedImage(int width,int height,int imageType,IndexColorModel cm)

其中参数说明如下:

width 表示所创建图像的宽度;

height 表示所创建图像的高度;

imageType 表示所创建图像的类型,可以取类常量值;

cm 表示所创建图像的IndexColorModel

2) 类常量

下边列出几个常量,每一个常量表示一种图像类型:

(1) TYPE_3BYTE_BGR 其值为5,表示一个具有8RGB颜色分量的图像,对应于 Windows风格的BGR颜色模型,具有用3字节存储的BlueGreenRed三种颜色。

(2) TYPE_INT_BGR 其值为4,表示一个具有8RGB颜色分量的图像,对应于 WindowsSolaris风格的BGR颜色模型,具有打包为整数像素的BlueGreenRed三种颜色。

(3) TYPE_INT_RGB其值为 1,表示一个图像,该图像具有打包成整数像素的8RGB 颜色分量。

3) 常用方法

BufferedImage类提供了众多的方法,下边列出对象常用的几个:

(1) public Graphics2D createGraphics() 创建一个Graphics2D对象,可以将它绘制到此 BufferedImage中。

(2) public int getType() 返回图像类型。

(3) public int getWidth() 返回 BufferedImage 的宽度。

(4) public int getHeight() 返回 BufferedImage 的高度。

上边简要介绍了相关类的功能,要了解详细的信息,请参阅有关的JDK文档。

下边举一个简单的例子来说明它们的应用。

11-13 11.14运行屏幕

11.14 在屏幕绘制如图11-13的两个矩形,一个采用颜色渐变,另一个采用纹理填充。

程序参考代码如下:

/*这是一个演示颜色渐变和纹理填充的示例

*程序的名称:GriphicExam11_14.java

*/

import java.awt.*;

import java.awt.image.*;

import java.awt.geom.*;

import java.awt.event.*;

import javax.swing.*;

public class GriphicExam11_14 extends JFrame

{

public GriphicExam11_14()

{

super("颜色渐变及纹理填充演示示例");

setSize(200,150);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public void paint(Graphics g)

{

Graphics2D g2d=(Graphics2D)g;

g2d.setPaint(new GradientPaint(20f,50f,Color.white,80f,80f,Color.blue, true)); //以颜色从白到蓝周期性渐变设置绘图方式

g2d.fill(new Rectangle2D.Double(20,50,70,70)); //以上述方式绘制矩形

BufferedImage texture=new BufferedImage(5,5,1);//创建BufferedImage对象

Graphics2D pattern=texture.createGraphics();//创建一个Graphics2D对象

pattern.setColor(Color.blue); //设置纹理图案的颜色

pattern.fillRect(0,0,5,5); //填充纹理图案

pattern.setColor(Color.white);//设置纹理图案的颜色

pattern.fillOval(0,0,5,5); //以外接圆方式填充纹理图案

Rectangle rect=new Rectangle(0,0,5,5);//创建用于定位和复制纹理的Rectangle2D对象

g2d.setPaint(new TexturePaint(texture,rect));//以指定的纹理设置绘图方式

g2d.fill(new Rectangle2D.Double(100,50,70,70));// 以纹理方式绘制矩形

}

public static void main(String args[]) //主方法main()

{

new GriphicExam11_14();

} //主方法main()结束

}

从上边的程序程序可以看出,纹理填充的过程要复杂一些,它涉及到多个类,要了解各个类的详细功能请查阅JDK的相关文档。

11.3 图像

图像是人类表达思想最直观的方法。在程序中通过使用图像可使用户界面更美观、更生动有趣,且便于用户操作。本节简要介绍一些处理图像的相关知识。

11.3.1 图像文件的格式及文件的使用权限

Java程序中处理图像主要是读取图像文件并显示,在前边介绍图形用户界面和applet程序时,我们已经看到了图像文件的应用。下边我们了解一下在Java中常用的图像格式以及对资源的使用权限。

1. 常用图像格式

当前有许多种格式的图像文件,在Java中最常用的是GIFJPEG这两种格式的图像文件。

1) GIF格式

GIF格式称为图像交换格式,它是internet WEB页面使用最广泛的、默认的及标准的图像格式。如果图像是以线条绘制而成的,则采用这种格式时,图像的清晰度要明显优于其他格式的图像,在维护原始图像而不降低品质的能力方面也同样优于其他格式。

2) JPEG格式

JPEG格式适合于照片、医疗图像、复杂摄影插图的情况。这种格式的图像是固有的全色图像,因此在一些支持色彩较少的显示器上显示这些格式的图像时会失真。

图像可以是二维的(2D),也可以是三维的(3D)。

2. 获取图像文件的权限

Java中,出于安全考虑,要获取或访问系统资源(如读写文件等),必须获得系统赋予的相应的权限。权限即是获取系统资源的权力。例如对文件所能授予的权限有:读、写、执行和删除。

Java在其策略文件中指明了应用程序环境中各种资源的使用权限。用户默认的策略文件被保存在用户主目录下名为java.policy的文件中。该文件是一个文本文件,我们可以使用文本编辑器来编辑创建策略文件,也可以使用JDK提供的PolicyTool工具来创建策略文件。在后边的章节中将介绍策略文件的创建。

11.3.2显示图像

一般来说,我们会在Applet容器中显示图像,如前所述,在Applet中装载图像时首先要使用对象的getImage()getDocumentBase()等方法获得要显示的Image图像对象,然后再在容器的paint()方法中调用Graphics对象的drawImage()方法显示图像。

总的来说,要绘制一幅图像,首先要获得图象文件对象,然后在容器上绘制它。获得图像文件对象的途径有多种,除了上边所说的在Applet中加载图像外,在前边我们还使用了ImageIcon对象在组件上加载图标。下边先介绍几个与获取图像对象相关的类,然后再给出几个显示图像的示例。

1. ImageIcon

1) 常用的构造方法

ImageIcon(Image image) 根据图像对象创建一个 ImageIcon

ImageIcon(String filename) 根据指定的文件创建一个 ImageIcon

ImageIcon(URL location) 根据指定的 URL 创建一个 ImageIcon

2) 常用方法

public Image getImage() 返回此ImageIcon Image 对象。

public void paintIcon(Component c,Graphics g, int x, int y) 在g 的坐标空间中的(x, y) 处绘制图标。如果此图标没有图像观察者,则使用 c 组件作为观察者。

public int getIconWidth() 获得图标的宽度。

public int getIconHeight() 获得图标的高度。

2. Toolkit

Toolkit类是一个抽象类,不能直接生成对象。但它提供了如下的类方法来获得Toolkit对象:

static Toolkit getDefaultToolkit()

在获得Toolkit对象之后,就可以使用对象的如下方法获得图像对象。

abstract Image getImage(String filename) 从指定文件中获取图像对象,图像格式可以是 GIFJPEG PNG

abstract Image getImage(URL url) 从指定的URL获取图像对象。

3. 显示图像示例

下边看几个简单的显示图像示例。

11.15 applet容器中显示一个指定的图像文件,图像文件名在HTML文档中指定。

参考程序代码如下:

/*这是一个在Applet容器中显示图像的示例

*程序的名称:ImageExam11_15.java

*/

import java.awt.*;

import java.applet.Applet;

public class ImageExam11_15 extends Applet

{

Image image;

public void init()

{

image=getImage(getDocumentBase(), getParameter("imgfile"));

}

public void paint(Graphics g)

{

g.drawImage(image,10,10,this);

}

}//类结束

嵌入appletHTML文件如下:

<html>

<applet code=ImageExam11_15.class height=800 width=600>

<param name="imgfile" value="P06.jpg">

</applet>

</html>

11.16 JFrame容器中绘制一幅图像。

参考程序代码如下:

/*这是一个在JFrame容器中显示图像的示例

*程序的名称:ImageExam11_16.java

*/

import java.awt.*;

import javax.swing.*;

public class ImageExam11_16 extends JFrame

{

Image image;

public ImageExam11_16()

{

ImageIcon icon=new ImageIcon("p06.jpg");

image=icon.getImage();

this.setSize(350,250);

this.setVisible(true);

}

public void paint(Graphics g)

{

g.drawImage(image,10,10,this);

}

public static void main(String [] args)

{

new ImageExam11_16();

}

}//类结束

当然我们也可以使用Toolkit类的功能获得Image图像对象:

Toolkit kit=Toolkit. getDefaultToolkit();

Image imageobj=kit.getImage(“p06.jpg”);

把这一功能的验证工作作为作业留给读者。

本章小结

本章简要介绍了在用户程序中绘制图形和图像的方法和步骤。

Java中使用GraphicsGraphics2D类的功能在容器或组件上绘制图形和图像。java.awt.geom包中定义了几何图形类,可以使用它们先定义形状,而后进行绘制。

本章还讨论了绘图颜色、调色板、绘图模式、画笔等其他方面的内容。

本章重点:

1. 绘图环境及用户坐标的基本概念;

2. 几何图形的定义及绘制的方法和步骤;

3. 绘图颜色及画笔的使用;

4. 获取图像及绘制图像的方法和步骤。

习题

一、问答题

1.绘制图形使用什么类和什么方法?

2.与颜色有关的类和方法有哪些?

3.显示图像用到什么类和什么方法?

二、编程题

1. 设计一Java程序,在标准的窗口(框架)中绘制一行文字,如“I like Java very very much”

2.在容器中绘制下图所示的图形。

3.在Applet中显示任意一幅图像。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多