kjey Skrevet 7. januar 2008 Rapporter Del Skrevet 7. januar 2008 (endret) Hei. Driver å forsker litt innenfor grafikk i java (litt bildemanipulasjon etc.). Jeg kom til å tenke på å prøve å lage en layer basert bildeeditor. Altså ikke noe veldig fancy, men ihvertfall slik at jeg kan legge på nye layers og flytte rundt på dem etter som hvem av dem jeg har valgt i menyen. Det jeg tenkte var at hver layer er en tegneflate(Component) som da legges på en grunnflate i (0, 0). Hver av disse layerne har en MouseMotionListener som gjør det mulig å flytte rundt på dem. Men så støttet jeg på et lite problem: Når man legger et Component opp på et annet, vil man ikke ha muligheten til å benytte seg av det som ligger under. Så det jeg lurer på er om noen kan dele litt ideer på hvordan dette problemet kan løses. Vil ikke ha en ferdig løsning (for da er morroa over ), men noen innlegg Håper noen er intressert i å hjelpe meg! Si ifra hvis problemstilling ble uklar. På forhånd takk! Endret 7. januar 2008 av kjey Lenke til kommentar
pgdx Skrevet 8. januar 2008 Rapporter Del Skrevet 8. januar 2008 Hva med å ha en egen knapp for å flytte valgt lag? Lenke til kommentar
kjey Skrevet 8. januar 2008 Forfatter Rapporter Del Skrevet 8. januar 2008 Hva mener du? Var ikke helt med på den Lenke til kommentar
NevroMance Skrevet 8. januar 2008 Rapporter Del Skrevet 8. januar 2008 Du sier du bruker Components for å lage layers? Går det ikke da ann å bare har ett menyvalg som hvor du sier hvilken Component du vil jobbe med der og da, da du velger en ny Component fjerner funksjonen alle andre Components fra ContentsPanet du bruker, men beholder selvsagt en peker til de i koden så du kan legge de på igjen. Lenke til kommentar
kjey Skrevet 8. januar 2008 Forfatter Rapporter Del Skrevet 8. januar 2008 Ja det var ikke en dum ide! Kan prøve å få til på en slik måte, men er bare litt usikker på hvordan jeg vil definere en Layer. Altså hvis jeg opretter en bilderamme på 300x300 px, vil da layeren bare være 300x300 px da? Grunnen til at jeg lurer på det er fordi hvis du flytter layeren halveis ut av bilderammen vil det jo være 50% du ikke kan tegne på fordi componenten er flyttet utenfor og da dekker den ikke hele bilderammen lenger... Hehe, håper noen skjønte hva jeg mente Uansett, takk for bra innspill! Lenke til kommentar
NevroMance Skrevet 8. januar 2008 Rapporter Del Skrevet 8. januar 2008 Tror jeg skjønner hva du mener ja. Det jeg er litt usikker på er om du vil la bruker bestemme antall px på hvert layer også? Det jeg tenker er at du kan la bruker bestemme størelsen på bilderammen, og deretter lar du hvert layer være like stort som bilderammen og la hele bilderammen følge layeret/componenten du tegner på der og da? Litt usikker på hvor mye jobb det siste vil bli å lage, da jeg har jobbet for lite GUI til å kunne svare på det, men ser for meg at det burde være en jobb som ikke er altfor stor å fikse. Vet ikke om det var helt dette du var ute etter? Hvis det ikke var det må du nok forklare litt nærmere hva du mener, så kan jeg forsøke å svare på det. Men sånn som det er formulert i din siste post vil jeg nok si det er mye en smakssak og noe du selv må bestemme hvordan du vil ha det/hva du liker best. Må forresten skyte inn at prosjektet høres veldig spennende ut. Hvis du ikke har planer om å holde det helt for deg selv hadde det vært spennende å prøve det ut da det var klart for testing;) Lenke til kommentar
kjey Skrevet 9. januar 2008 Forfatter Rapporter Del Skrevet 9. januar 2008 Skal selvfølgelig legge ut resultatet Men jeg er enig med deg, altså layerne blir like store som bilderammen, eller brukeren kan bestemme. Tittet på Gimp, og der hadde de ihvertfall brukt den løsningen. Men angående hvordan man flytter rundt på komponentene, jeg tror jeg kanskje har en ide: Hvis jeg legger alle layerne på tegneflaten, men helt på toppen legger en gjennomsiktig layer (som er like stor som tegneflaten) som brukeren ikke har kontroll på, kan jeg da bruke denne til å lytte på musbevegelser. Det denne "musbevegelsesensoren" gjør er at den sjekker hvilken layer som er valgt i menyen og endrer kordinatene til den ettersom hvor du flytter musa. For hver flytting blir repaint() kalt av tegneflaten. Det som er så fint med denne løsningen er at man hele tiden får de riktige kordinatene i forhold til tegneflaten, fordi mussensoren er like stor som tegneflaten, og kan ikke flyttes slik at tegneflaten og mussensoren alltid vil ligge paralelt over hverandre. Noen kommentarer til denne tanken? Lenke til kommentar
NevroMance Skrevet 9. januar 2008 Rapporter Del Skrevet 9. januar 2008 Syntes det hørtes ganske bra ut ja, eneste jeg tenker er at da må du fjerne den gjennomsiktige layeren, legge til den nye og så legge til den gjennomsiktige igjen etter å ha lagt til? Ellers blir det ett gjennomsiktig layer mellom hvert layer, noe som vil gjøre hele programmet veldig treigt igjen. Tok tanken om at layerne skulle være like store som rammen fra Gimp selv Lenke til kommentar
kjey Skrevet 9. januar 2008 Forfatter Rapporter Del Skrevet 9. januar 2008 Altså poenget er at jeg ikke trenger å fjerne noen components i det hele tatt. Altså alle komponentene er jo gjennomsiktige, så bare legger dem opp på hverandre i riktig rekkefølge, og da hel på toppen denne mussensoren. Skal se om jeg får snekret sammen noe ganske snart så skal jeg legge det ut for inspeksjon Kommer ikke til å bli noe avanserte greier i første omgang, bare en demonstrasjon på teorien vi har kommet fram til. Lenke til kommentar
LostOblivion Skrevet 10. januar 2008 Rapporter Del Skrevet 10. januar 2008 (endret) Jeg ville laget en array med Graphics2D-objekter, og hatt en eneste JComponent-layer. Ut ifra hvilken layer brukeren har valgt (hvilken indeks f eks i Graphics2D-array-et), så er det denne Graphics2D-objektet det blir tegnet til. På denne måten blir det vel enklere, med tanke på at du slipper å tenke på layers i JComponent-forstand men hva man egentlig tegner til. Da trenger du jo bare å lage en mouselistener for denne JComponenten, og ikke en for hvert lag brukeren lager, som antakelig vil gå kjappere. Brukeren kan da velge hvilke, eller alle, av layers/Graphics2D som skal renderes. Å kombinere å tegne flere Graphics2D til et bilde er vel ikke noe problem. Endret 10. januar 2008 av LostOblivion Lenke til kommentar
kjey Skrevet 12. januar 2008 Forfatter Rapporter Del Skrevet 12. januar 2008 Sånn, nå har jeg prøvd ut litt forskjellig og må si jeg likte ideen til LostOblivion. Det jeg har gjort er å definere en layer som et BufferedImage og organiserer dem ved å legge de i en "LayerStack". Hver gang musa blir dratt på skjermen endrer Layer-kordinatene seg og tegneflaten kaller repaint() som henter layerne i riktig rekkefølge og maler dem på skjermen. Men har et lite spørsmål: er litt usikker på hvordan jeg skal ha denne stacken. Altså arrayen til å legge inn Layerne må helt klart ha funksjonen til å utvide seg til minnet sier stopp, men siden dette er snakk om referanser til layere og ikke tallverdier, er jeg litt usikker på hvordan jeg kan flytte f.eks. en referanse midt i arrayen helt forand for så å "dytte" de andre bakover. Med tall er det jo ganske greit, for da lager man bare en temp variabel og flytter verdiene litt fram og tilbake... Uansett om dere skjønner hva jeg mener eller ikke, er det noen som har et forslag på hvordan en slik LayerStack kan se ut? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå