Avatar billede thomas_theis Nybegynder
15. september 2003 - 16:55 Der er 9 kommentarer og
1 løsning

Arrays som billeder

Jeg har med vilje sat dette spørgsmål til et svært spørgsmål. Det er det ganske givet ikke, men mit håb er at jeg måske kan finde en 'sparingspartner' til mit lille problem her.

I al sin simpelhed har jeg et dynamisk array. Indtil nu har jeg kunne klare mig med at vise det i et stringgrid, men nu er tiden kommet til at lave en grafisk udgave af det samme. Så, hvordan bærer jeg mig ad med at lave en form hvor indholdet af mit array bliver vist som et antal pixels med forskellig gråtone/farve...

Jeg kan godt se at det er et lidt bredt spørgsmål, men jeg har tidligere sloges med et lignende problem - uden held.
Avatar billede hermandsen Juniormester
15. september 2003 - 17:08 #1
Vil du ha' et array af billeder?

  array of TImage;
  array of TBitmap;

eller har du et array som du vil gemme billed-information i!?
Avatar billede thomas_theis Nybegynder
15. september 2003 - 17:12 #2
Ingen af dele i virkeligheden. Jeg vil have en grafisk fremstilling af et array. Jeg sidder og laver rummelige modeller og de er bygget op i et ganske almindeligt array hvor hver celle i arrayet svarer til et sted. Hver sted har en værdi. Det kunne fx. være en iddeling af hele DK i et antal felter og hver felt har en værdi der svarer til gennemsnitsindkomsten i den celle. Det jeg så gerne vil lave er et billede af denne fordeling hvor celleværdierne oversættes til en farve - fremfor som nu hvor de bare vises i et stringgrid.
Avatar billede hermandsen Juniormester
15. september 2003 - 17:31 #3
Sådan som du fortæller det nu, lyder det mere for mig som om du vil fremstille en graf! Er det korrekt forstået?
Avatar billede hermandsen Juniormester
15. september 2003 - 17:32 #4
Eller tegne vektor-grafik måske!?
Avatar billede lanstorp Nybegynder
15. september 2003 - 18:01 #5
Det du har gang i lyder som raster GIS (Geografisk InformationsSystem).
Dit array (af en record) må indeholde mindst tre felter: X,Y,værdi.
Du må kende dimensionen på dit grid. Derfor må du kunne du oprette et bitmap i din dimension. Loop arrayet igennem og tildele en pixel farven der har en relation til din værdi. Hvordan ser din record ud ?
Avatar billede thomas_theis Nybegynder
16. september 2003 - 01:01 #6
Du har helt ret; det drejer sig om et lille GIS, og ja, mit array indeholder 3 værdier; en x og en y position (blot row og col i mit stringgrid) samt en værdi. Det er dette grid som jeg ønsker at lave en simpel grafisk represetation af. Spørgsmålet er hvordan man let laver denne grafiske flade som viser grid'et.

Fra gang til gang kender jeg størrelsen på mit grid, men hver gang programmet kører kan (og vil) grid'et skifte størrelse.
Avatar billede lanstorp Nybegynder
16. september 2003 - 09:37 #7
Bitmap := TBitmap.Create;
  try
    Bitmap.Width := StringGrid1.ColCount;
    Bitmap.Height := StringGrid1.RowCount;
    for x := 0 to StringGrid1.ColCount-1 do begin
      for y := 0 to StringGrid1.RowCount-1 do begin
        Bitmap.Canvas.Pixels[x,y] := TColor(StringGrid1.Cells[x,y]);
      end;
    end;
    Image1.Picture.Bitmap := Bitmap;
  finally
    Bitmap.Free
  end;

Ellers brug www.inovagis.org komponenten

For lidt raster GIS info se http://www.lanstorp.com/download/gis_kort_fortalt.pdf
Avatar billede thomas_theis Nybegynder
16. september 2003 - 10:33 #8
Ja, det virker jo over al forventning - fantastisk at noget der ser så simpelt ud kan være så svært selv at finde ud af... Men den virker ret langsom. Hvis jeg sætter hhv. col og row til 500 og stretch på image1 til true, så går det virkelig langsomt. Det er jeg lidt ked af, da vi skal benytte det til at lave dynamiske modeller som skal opdateres mange gange i løbet af en enkelt programafvikling. Er der en måde at gøre det lidt hurtigere...?
Avatar billede lanstorp Nybegynder
16. september 2003 - 11:01 #9
Hos mig kører det nu hurtigt (2GHz,512MB RAM,64MB Grafik);
1000 x 1000 grid ca 1 sek.

Skal det laves ordentligt skal I bruge en raster GIS komponent.

Som http://www.inovagis.org/freeware/delphi/

Gør det selv er ren opfind den dybe tallerken igen * 100000000000.
Hvad hvis i vil have:
Adderet vektor objekter fra andre GIS. Feks. Kommunegrænser.
Hvad med legende.
Skift af farver afhængig af data.
Lave Geografisk SQL.
Zoome i billedet (el. kortet, hvad det jo er)
Panorere i kortet (flytte centrum).
Lægge to kort oven i hinanden.
Oprette raster modellen direkte fra vektordata.
og meget andet ....

Det fåes med InovaGIS og de fleste andre professionelle GIS.
Det kunne være sjovt at vide havd du specifikt skal modellere og for hvem ?
Avatar billede thomas_theis Nybegynder
17. september 2003 - 13:42 #10
Du har helt ret; der er en vis portion dyb tallerken over dette her, men i al sin simpelhen skal jeg blot lave et lille vindue der viser et billede. Der skal ingen andre funktionaliteter til dette.

I praksis skal jeg benytte det til et lille program jeg og en af mine kolegaer er ved at lave. Vi arbejder med rumlige modeller (CA, MAS og Markov kæder) som vi vil bruge til at arbejde med den rumlige udbredelse af land-use. Vi sidder begge to på geografisk institut - og du er vel geolog såvidt jeg kan gætte...

Iøvrigt et spændende sted, inovagis. Det kendte jeg ikke.
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