webForumDet fria alternativet

Färgmodell i ett Imageobjekt?

5 svar · 248 visningar · startad av FredrikF

FredrikFMedlem sedan maj 200391 inlägg
#1

Jag har problem med min applet igen. Jag implementerar
en "byt bakgrundsfärg" för min ritapplet. Ritytan där användarens penseldrag osv
och eventuell bakgrundsbild spars i ett Image objekt som i Paintmetoden ritas till min
JPanels graphic context.

Problement är att jag vill implementera byt bakgrundsfärg med
att rita en rektangel i en vald färg över hela Imageobjektet.
Detta går men rektangeln blir alltid svart oavsett vilken färg jag
satt. Misstänker att det har med nån färgmodell i BufferedImage klassen
att göra.

Nån som har stött på samma problem eller har en lösning?

ViktorMedlem sedan aug. 20021 710 inlägg
#2

Kan du lägga ut lite kod så man kan se hur din rita bakgrund serut?

/Viktor

FredrikFMedlem sedan maj 200391 inlägg
#3

min paintmetod.
sketch är ett Image objekt som innehåller eventuell bakgrundsbild
samt det som ritas med musen och skrivs med tangentbordet.
img är ett Image objekt innehållandes en bild i jpg-format som tjänar som
bakgrundsbild för ritytan (skall även sparas tillsammans med det ritade materialet)
Sketch sätts till null när användaren raderar hela ritytan
alternativt raderar allt utom bakgrundsbilden.

public void paintComponent(Graphics g) {
super.paintComponent(g);
if(sketch == null){
// skapar image objeketet sketch som är ritytan.
sketch = createImage(WinSizes.getSketchWidth(), WinSizes.getSketchHeight());
System.out.println("SketchPad::Sketch: " + sketch);
// Om EraseMode() returnerar true kopieras img objektet till sketch objektet
// annars kopieras inte img till sketch och bildytan blir tom.
// Om AllErased returnerar true har användaren raderat allt och img
// objektet kommer inte att ritas på sketchobjektet.
if(!Mode.EraseMode() && (!Mode.AllErased())){
sketch.getGraphics().drawImage(img, 0, 0, 380, 285, this);
}
}

if(Mode.allErasedNotDrawnYet()){
// om allErasedNotDrawnYet returnerar true har användaren raderat allt och
// bakgrundsfärgen går nu att byta.
System.out.println("setting bgcolor to " + Mode.getBgColor());
sketch.getGraphics().setColor(Color.red); // tar ej emot någon färg
sketch.getGraphics().fillRect(0, 0, 100, 100);
}
g.drawImage(sketch, 0, 0, 380, 285, this);
}

FredrikFMedlem sedan maj 200391 inlägg
#4

problemet löst, glöm detta inlägg

Jag har löst problemet så no behöver inte svara på detta inlägg

ViktorMedlem sedan aug. 20021 710 inlägg
#5

Vad var det för fel?

/Viktor

FredrikFMedlem sedan maj 200391 inlägg
#6

Jag skapade ett nytt imageobjekt i metoden och det försvann kvickt vid repaint() eftersom
det inte var skrivet till ett persistent Imageobjekt ännu.
Istället hämtade jag grafiska kontexten för min bild och ritade direkt till
den.

Genererad på 394 ms · cache AV · v20260730165559-full.f96bc7eb