我有一个40*40的图[原图],用GC画在一个可以随意缩放的Canvas里面,当Canvas缩放时,重画这个图[修改图],
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
int nWidth = canvas.getClientArea().width;
int nHeight = canvas.getClientArea().height;
e.gc.drawImage(image, 0, 0, imageData.width, imageData.height, 0, 0, nWidth,nHeight);
}
}
当鼠标点到这个[修改图]中的一个点时,可以得到坐标,但是我想得到[原图]的坐标,有什么好的办法吗??我之前的做法是使用BigDecimal对象,[修改图]宽度/[原图]宽度,得到一个宽度的对比度,然后再根据鼠标当前坐标得到原图坐标,可是当图很小的时候,误差很大请个一点提示,不胜感激
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
int nWidth = canvas.getClientArea().width;
int nHeight = canvas.getClientArea().height;
e.gc.drawImage(image, 0, 0, imageData.width, imageData.height, 0, 0, nWidth,nHeight);
}
}
当鼠标点到这个[修改图]中的一个点时,可以得到坐标,但是我想得到[原图]的坐标,有什么好的办法吗??我之前的做法是使用BigDecimal对象,[修改图]宽度/[原图]宽度,得到一个宽度的对比度,然后再根据鼠标当前坐标得到原图坐标,可是当图很小的时候,误差很大请个一点提示,不胜感激
解决方案 »
- 新手看完java编程思想导论进行学习总结请前辈和新手们一起指导和讨论
- myeclipse中ant build的问题
- 类型问题short和int的转换!!!!
- JAVA做界面开发,数据方面一般用什么技术
- 关于ClassLoader的getResourceAsStream方法的疑问!
- socket使用中ObjectOutputStream ,ObjectInputStream的问题
- 用applet的repaint()方法能完全消除闪烁????
- 如何做出可以显示多列数据的ComboBox
- tomcat配置问题,一定给分!
- 大家来聊聊java大数据开发需要具备的技能呗!
- eclipse 提示“Cannot refer to a non-final variable frame inside an inner class defined in a different method”
- JPanel背景渐变颜色问题
地图大小 40*40 ,色深8,也就是说一个像素是一个坐标,当前鼠标所指向的坐标可以通过下面的方法得到
public void mouseDown(MouseEvent e) {
imageData.getPixel(e.x, e.x)
}假如Canvas被拉大到 80*80 ,可以这样得到
public void mouseDown(MouseEvent e) {
//imageData是原图的图像数据,因为当前图像是原图的两倍,所以可以通过除2来得到原图对应坐标
imageData.getPixel(e.x/2, e.x/2)
}但是假如Canvas被拉大到 291*379,那如何得到原图对应坐标?我用BigDecimal设置16个小数点,仍然有2,3个像素的差距
{ if( zoomRate == 0 )
return 0;
if( zoomRate == 1 )
{
return scaledValue;
}
/*
* For example:
* if the scaledValue is 8, zoomRate is 8, then the real value is ( 8 - 1 )/8 + 1 = 1
* if the scaledValue is 9, zoomRate is 8, then the real value is ( 9 - 1 )/8 + 1 = 2
* if the scaledValue is 4, zoomRate is -4, then the real value is -( 4 * (-4) = 16
*/
int realValue = ( zoomRate > 0 ) ? ( ( scaledValue - 1 ) / zoomRate + 1 ) : ( -( scaledValue * zoomRate ) );
return realValue;
}
太谢谢啦.找了好久!