Avatar billede sarkis Nybegynder
27. november 2003 - 17:25 Der er 4 kommentarer

Generer billede fra tekstfiler

Hej alle

Jeg har et ret stort problem (syntes jeg da selv), som jeg håber en eller anden gider at hjælpe mig med.

For det første skal jeg sige at jeg er ny i Java, så jeg derfor ikke ved så meget omkring alt det med appletter og læsning fra filer.

Mit problem består i at jeg har 3 (muligvis flere senere) tekstfiler hver indeholdende 1 talrække (de tre talrækker er: frekvens, tempo og amplitude). Disse tal skal omdannes til ét enkelt billede som så skal bruges i et eksperiment senere hen. Værdierne i tekstfilerne kommer fra udtræk af nogle forskellige musikstykker.

Hvordan skal jeg bære mig ad med at trække dataene ud af tekstfilerne for derefter at tegne forskellige figurer med dem?

Jeg har indtil videre fundet ud af at hente dataene og skrive dem i Javakonsollen, men hvis jeg laver en applet, for at tegne, sker der intet med de data jeg indhenter.

Det der skal genereres vides ikke med sikkerhed endnu, men sikkert noget med en tidslinie. Men det er for så vidt pt. også fuldstændig ligegyldigt... Bare jeg kan få udtrækkene til at virke...

Jeg har overvejet at bruge arrays, men aner desværre ikke noget om det i Java (er haj til VBScript dog, hehe).

Jeg er i det hele taget ude på dybt vand hvad hele denne objektorienterede verden angår, men jeg SKAL lære det...

Jeg går ud fra at det er hensigtsmæssigt at dele noget af det ind i nogle klasser, men eftersom det er et lille projekt, ken jeg ikke helt se fordelen...

En eller anden... HJÆÆÆÆLP!!!

Det skal siges at det er til et skoleprojekt (medialogi), så der er en deadline inden 1 uge :o(
Avatar billede soreno Praktikant
27. november 2003 - 17:35 #1
Sådan kan du skrive til et BufferedImage og få skrevet til en fil:
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;

public class BufferedImageTest
{
    public static void main(String args[])
    {
        int size = 512;
        BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);

        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                image.setRGB(i, j, i * j % 256);
            }
        }

        try
        {
            ImageIO.write(image, "png", new File("test.png"));
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

Så er det jo "bare" et spørgsmål om at fordele data (frekvens, tempo og amplitude) fornuftigt på et image.

Jeg ved ikke specielt meget om lyd, så jeg ved ikke hvordan man kan/plejer at repræsentere data.
Avatar billede sarkis Nybegynder
27. november 2003 - 21:24 #2
Du skal have mange tak for dit hurtige svar.
jeg kigger på det i weekenden og vender tilbage til dig :-)
Mvh
sarkis
Avatar billede sarkis Nybegynder
28. november 2003 - 11:55 #3
hej soreno

men hvordan vi får trukket dataene ud af
billedet. Du kommer dog med en fin beskrivelse af hvordan vi tegner et
billede til png.

Jeg syntes ikke rigtig vi kan bruge det til noget lige nu. Men hvis du
har mulighed for at fortælle os hvordan vi kan gøre det vil vi være meget taknemlige.

Problemet er at vi skal have læst fra en tekstfil og skrevet indholdet
ud evt. ved hjælp af en applet. Men hvis man kan benytte sig af den
funktion du foreslår til at skrive billedet med, er det en fin idé. Men
pt. kan vi ikke se nogen brugbare anvendelses muligheder.

på forhånd tak

Med venlig hilsen
sarkis
Avatar billede soreno Praktikant
28. november 2003 - 12:08 #4
Følgende er en applikation der viser brugen af Image.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;

public class SwingTest extends JFrame implements ActionListener
{
    private int frameWidth = 640;
    private int frameHeight = 480;
    private JPanel panel;
    private JButton button;
   
    public SwingTest()
    {
        createFrame();
    }

    private void createFrame()
    {
        setTitle("TestKlasseSwing");
        JFrame.setDefaultLookAndFeelDecorated(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //components
        panel = new JPanel();
        this.getContentPane().add(panel, BorderLayout.CENTER);
       
        button = new JButton("Paint!");
        button.addActionListener(this);
        this.getContentPane().add(button, BorderLayout.SOUTH);

        //Center Frame
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new java.awt.Dimension(frameWidth, frameHeight));
        setLocation((screenSize.width - this.getWidth()) / 2, (screenSize.height - this.getHeight()) / 2);
    }

    public void actionPerformed(ActionEvent e)
    {
        //Ved tryk på "Button"
        Graphics g = panel.getGraphics();
        int w = panel.getWidth();
        int h = panel.getHeight();
       
        BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);       
       
        for (int i = 0; i < w; i++)
        {
            for (int j = 0; j < h; j++)
            {
                image.setRGB(i, j, i * j % 256);
            }
        }
       
        g.drawImage(image, 0, 0, null);
    }

    public static void main(String args[])
    {
        new SwingTest().show();
    }
}

Det meste kan genbruges i en applet.
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