¿Como puedo hacer el efecto lupa?

Necesito hacer el efecto lupa o zoom con letras en un applet
Tengo que pasar el puntero del mouse con una forma circular g.drawOval(x-10, y-10,20,20); o rectangular, y las letras que entren dentro de ese circulo o rectangulo deben aumentar de tamaño.
Esto es algo que he hecho, en realidad casi nada.
Si me pudieras ayudar te lo agradeceria mucho
¿Cómo lo puedo hacer?
Lo casi nada que he hecho es esto
import java.awt.*;
import java.applet.*;
public class Cursor extends Applet{
private Dimension Loc;
private boolean Drag;
private Font f[]={new Font("Times",Font.PLAIN,14),new Font ("Times",Font.BOLD+Font.ITALIC,36)};
private FontMetrics fm[]=new FontMetrics[f.length];
public void init(){resize(640,480);
for (int i=0;i<f.length;i++)
fm=getFontMetrics(f);
resize (500,600);}
public void paint(Graphics g){
String Cursor="[" + Loc.width + "," + Loc.height + "]";
g.drawString(Cursor,40,40);
if(Drag){g.setColor(Color.red);}else {g.setColor(Color.black);}
int x=Loc.width;
int y=Loc.height;
String fr="Dabale arroz a la zorra el abad";
char c[];
c=new char[fr.length()];
//for(int j=0;j<f.length;j++)
//g.drawString(fr,(getSize().width - fm[j].stringWidth(fr))/2,(getSize().height/(f.length+1))*(j+1)+fm[j].getMaxAscent());
//nueva
/* if(Drag)
{setFont(new Font("Arial",Font.ITALIC,46));}
else
{setFont(new Font("Arial",Font.PLAIN,36));}
int x=Loc.width;
int y=Loc.height;
}
*/
for(int i=0;i<fr.length();i++){
setFont(new Font("Arial",Font.ITALIC,15));
g.drawChars(c,i,1,i,200);
}
g.drawOval(x-25,y-25,50,50);
//
fr.getChars(0,fr.length(),c,0);
//g.drawChars(c,0,1,x,y);
//
}
//g.drawLine(x-2,y,x+2,y);
//g.drawLine(x,y-2,x,y+2);}
public boolean mouseDrag(Event evt,int x,int y){
Drag=true;
Loc=new Dimension(x,y);
repaint();
return true;}
public boolean mouseMove(Event evt,int x,int y){
Drag=false;
Loc=new Dimension(x,y);
repaint();
return true;}}

1 respuesta

Respuesta
1
Siento el retraso, pero el trabajo... ya se sabe, es lo primero.
En htmlpoint.com existen cientos de applets con utilidades particulares de efectos especiales. Algunos no proporcionan el código fuente, pero se puede extraer con el JAD (http://kpdus.tripod.com/jad.html) o Java Decompiler. Algunos están ofuscados (refactorización absurda) pero con un IDE como el eclipse es casi inmediato tener el fuente completo con sentido.
Uno muy elaborado para lupa está en http://www.htmlpoint.com/java/a263/applet.htm. Utiliza el alpha para tener un efecto traslúcido.
Otro de zoom normal (como cuadrado para toda la imágen está en)
http://www.htmlpoint.com/java/a214/applet.htm
Un efecto similar al del flash, que te puede servir de referencia es http://applets.iespana.es/applets/applets/Enlaces/zoomtext/ZoomText.html, y el código (decompilado) es:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: C:\Windows\Desktop\Software\Zooming Messages\ZoomText\ZoomText.java
import java.applet.Applet;
import java.applet.AppletContext;
import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.StringTokenizer;
public class ZoomText extends Applet
implements Runnable
{
public void start()
{
if(the_thread == null)
{
the_thread = new Thread(this);
the_thread.start();
}
}
public void stop()
{
if(the_thread != null)
{
the_thread.stop();
the_thread = null;
}
}
public boolean mouseExit(Event e, int x, int y)
{
mouse_in = false;
return true;
}
public boolean mouseEnter(Event e, int x, int y)
{
mouse_in = true;
return true;
}
public void DrawBackGround(Graphics g)
{
g.setColor(m_bgcolor);
g.fillRect(0, 0, d.width, d.height);
}
public boolean mouseUp(Event e, int x, int y)
{
if(mouse_in && m_desturl != null)
{
try
{
goURL = new URL(m_desturl);
}
catch(MalformedURLException malformedurlexception) { }
getAppletContext().showDocument(goURL, m_framelocation);
}
return true;
}
public void run()
{
do
try
{
while(!gSok) ;
GrowIt(getGraphics());
}
catch(InterruptedException interruptedexception) { }
while(true);
}
public ZoomText()
{
m_delay = 1000;
m_bgcolor = Color.white;
m_font = "Arial";
m_textcolor = Color.black;
m_framelocation = "_self";
m_xoff = 5;
m_jump1 = 10;
m_jump2 = 1;
m_exit_factor = 8;
}
public Color ConvertColor(String temp)
{
int r = 0;
int g = 0;
int b = 0;
temp.trim();
StringTokenizer st = new StringTokenizer(temp, ",");
if(st.countTokens() > 3)
return Color.black;
while(st.hasMoreTokens())
{
r = Integer.parseInt(st.nextToken().trim());
g = Integer.parseInt(st.nextToken().trim());
b = Integer.parseInt(st.nextToken().trim());
}
st = null;
if(r > 255)
r = 255;
if(g > 255)
g = 255;
if(b > 255)
b = 255;
Color ctemp = new Color(r, g, b);
return ctemp;
}
public void init()
{
d = size();
int i = 0;
String crstr = "Zooming Messages, Copyright (c) OpenCube Technologies, Unregistered";
String param = getParameter("Notice");
if(param != null)
if(param.equals(crstr))
gSok = true;
else
gSok = false;
param = getParameter("desturl");
if(param != null)
m_desturl = new String(param);
else
m_desturl = null;
param = getParameter("loadwhere");
if(param != null)
m_framelocation = param;
param = getParameter("delay");
if(param != null)
m_delay = Integer.parseInt(param);
param = getParameter("exitzoom");
if(param != null)
m_exit_factor = Integer.parseInt(param);
param = getParameter("xoffset");
if(param != null)
m_xoff = Integer.parseInt(param);
param = getParameter("jump1");
if(param != null)
m_jump1 = Integer.parseInt(param);
param = getParameter("jump2");
if(param != null)
m_jump2 = Integer.parseInt(param);
param = getParameter("framedelay");
if(param != null)
m_frame_delay = Integer.parseInt(param);
param = getParameter("bgcolor");
if(param != null)
m_bgcolor = ConvertColor(param);
param = getParameter("textcolor");
if(param != null)
m_textcolor = ConvertColor(param);
param = getParameter("italic");
if(param != null)
m_italic = Boolean.valueOf(param).booleanValue();
param = getParameter("bold");
if(param != null)
m_bold = Boolean.valueOf(param).booleanValue();
param = getParameter("font");
if(param != null)
m_font = param;
if(m_bold)
font_style = font_style + 1;
if(m_italic)
font_style = font_style + 2;
while(getParameter("desc" + i) != null)
{
i++;
m_num_msg++;
}
m_desc = new String[m_num_msg];
m_current_color = new Color[m_num_msg];
for(i = 0; i < m_num_msg; i++)
{
param = getParameter("desc" + i);
if(param != null)
m_desc = new String(param);
else
m_desc = new String(" ");
param = getParameter("textcolor" + i);
if(param != null)
m_current_color = ConvertColor(param);
else
m_current_color = m_textcolor;
}
setBackground(m_bgcolor);
off = createImage(d.width, d.height);
g_off = off.getGraphics();
setFont(font = new Font(m_font, font_style, 20));
fm = getFontMetrics(font);
}
public void paint(Graphics g)
{
if(!gSok)
{
g.setColor(m_textcolor);
g.drawString("Invalid Notice Tag", d.width / 2 - fm.stringWidth("Invalid Notice Tag") / 2, (d.height + fm.getAscent()) / 2);
return;
} else
{
g.drawImage(off, 0, 0, this);
return;
}
}
public void GrowIt(Graphics g)
{
int m_size = 1;
int i = 0;
for(i = 0; i < m_num_msg; i++)
{
while(fm.stringWidth(m_desc) < d.width - m_xoff)
{
m_size += m_jump1;
g_off.setFont(font = new Font(m_font, font_style, m_size));
fm = getFontMetrics(font);
g_off.setColor(m_bgcolor);
g_off.fillRect(0, 0, d.width, d.height);
g_off.setColor(m_current_color);
g_off.drawString(m_desc, 0, ((d.height + fm.getAscent()) - fm.getLeading()) / 2);
g.drawImage(off, 0, 0, this);
try
{
Thread.sleep(m_frame_delay);
}
catch(InterruptedException e) { }
}
try
{
Thread.sleep(m_delay);
}
catch(InterruptedException e) { }
while(fm.stringWidth(m_desc) < d.width * m_exit_factor)
{
m_size += m_jump2;
g_off.setFont(font = new Font(m_font, font_style, m_size));
fm = getFontMetrics(font);
g_off.setColor(m_bgcolor);
g_off.fillRect(0, 0, d.width, d.height);
g_off.setColor(m_current_color);
g_off.drawString(m_desc, (d.width - fm.stringWidth(m_desc)) / 2, ((d.height + fm.getAscent()) - fm.getLeading()) / 2);
g.drawImage(off, 0, 0, this);
try
{
Thread.sleep(m_frame_delay);
}
catch(InterruptedException interruptedexception) { }
}
m_size = 1;
g_off.setFont(font = new Font(m_font, font_style, m_size));
fm = getFontMetrics(font);
}
}
URL goURL;
Thread the_thread;
Dimension d;
Font font;
FontMetrics fm;
Image off;
Graphics g_off;
boolean gSok;
boolean mouse_in;
int font_style;
int m_num_msg;
private int m_delay;
private int m_frame_delay;
private Color m_bgcolor;
private boolean m_italic;
private boolean m_bold;
private String m_font;
private Color m_textcolor;
private String m_desturl;
private String m_framelocation;
private String m_desc[];
private Color m_current_color[];
private int m_xoff;
private int m_jump1;
private int m_jump2;
private int m_exit_factor;
}
Depende de lo que quieras exáctamente, se puede adaptar el código o las ideas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas