Avatar billede jetrit Nybegynder
02. november 2003 - 08:54 Der er 4 kommentarer og
1 løsning

baggrundsbillede vises ikke

hej der jeg har et problem med min servlet den skal generere et billede og sende det tilbage til "brugeren", men vær anden gang servletten loades kommer baggrunds billedede ikke med

er der nogen der kan sige hvorfor??


package jsptags;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.*;
import java.awt.*;
import java.awt.color.*;
import java.awt.RenderingHints.*;
import model.*;

public class GenerateJpeg extends GenericServlet{
  public void service(ServletRequest request, ServletResponse response) throws IOException
  {
    Visitkort vk = (Visitkort) ((HttpServletRequest) request).getSession().getAttribute("Visitkort");
    BufferedImage buffimg = new BufferedImage( vk.getWidth(), vk.getHøjde(), BufferedImage.TYPE_INT_RGB);

    Graphics2D grafik = (Graphics2D) buffimg.getGraphics();
    grafik.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage(vk.getBaggrund());
    grafik.drawImage(image, 0, 0, null);
    while (vk.NesteElement()){
      TekstElement text = (TekstElement) vk.Hent();
      Font font = new Font(text.getSkrifttype(), text.getTypografi(), text.getFontStr());
      grafik.setFont(font);
      Farve f= text.getFarve();
      grafik.setColor(setCMYKColor((float) f.getC(), (float) f.getM(), (float) f.getY(), (float) f.getK()));
      float fontMod =  (float) 0.93;  // DBQ.getFontMod(font.getFontName());
      float yMod = vk.getHøjde() - text.getY();// - font.getSize();
      grafik.drawString(text.getTekst(), text.getX(), yMod);
    }
    response.setContentType("image/jpeg");
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
    JPEGEncodeParam params = JPEGCodec.getDefaultJPEGEncodeParam(buffimg);
    params.setQuality(1, true);
    encoder.encode(buffimg, params);
  }

  //konvatere points til pixles
  public float pToP(int i){
    //har vedtaget at der er 88 pixel pr tomme på en gennemsnits skærm
    return (float) i;//* 72/88;
  }

  // konvatere fra cmyk til RGB efter adobe spicifikation 1.3
  private Color setCMYKColor(float c, float m, float y, float k){
  float r, g, b;
  c=c/100;
  m=m/100;
  y=y/100;
  k=k/100;
  r = ( c + k );
  if( r > 1 )
        r = 1;
  g = ( m + k );
  if( g > 1 )
        g = 1;
    b = ( y + k );
    if( b > 1 )
        b = 1;
    return new Color( (int)( 255 * ( 1 - r ) ), (int)( 255 * ( 1 - g ) ), (int)( 255 * ( 1 - b ) ) );
  }
}
Avatar billede erikjacobsen Ekspert
02. november 2003 - 09:21 #1
Caching af billedet? Eller hvad mener du der sker hver anden gang?
Man kan normalt undgå caching med disse headers:

Expires: Fri, Jun 12 1981 08:20:00 GMT
Pragma: no-cache
Cache-Control: no-cache
Avatar billede jetrit Nybegynder
02. november 2003 - 09:26 #2
nej billede vises (den skrift jeg skriver på billed vises) men baggrunden vises ikke
kan det være fordi den slet ikke bliver loadet ind i servletten??
Avatar billede erikjacobsen Ekspert
02. november 2003 - 09:34 #3
Altså den her: Image image = toolkit.getImage(vk.getBaggrund());
Den kommer ikke hver gang ?
Avatar billede erikjacobsen Ekspert
02. november 2003 - 09:37 #4
Dokumentationen siger noget om problemer med getImage og sharing. Måske
du skal bruge

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Toolkit.html#createImage(java.lang.String)
Avatar billede jetrit Nybegynder
06. februar 2004 - 11:01 #5
Hej Erik så er det meget lang tid jeg har været på eksperten du må undskylde jeg ikke har lukket spørgsmålet:-(
Løsningen er fundet og jeg poster den i aften.
hvis du mener du er du skal have nogle point må du lige lægge et svar inden da

mvh jens
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester