Avatar billede x4all_dk Nybegynder
23. august 2004 - 13:19 Der er 6 kommentarer og
1 løsning

Læse BMP-filer.

Jeg skal lave noget med område "genkendelse", men jeg har lidt problemer med at finde en god/nem løsning.

Jeg for et .BMP billede som input. Dette billede har nogle
områder bestående af forskellelige farver.
Hvordan kan jeg "aflæse" disse "områder" så jeg kan lave et
"billede" af det i f.eks. et 2dim-array.

Jeg forestiller mig at læse hver pixel og så putte det i et 2dim-array(x,y) = Farven.

Men .. hvordan gør man lige det smart!!
Avatar billede kammeyer Nybegynder
23. august 2004 - 13:37 #1
Hvordan er områder defineret? Er det en farvet streg / cirkel / firkant - kan der forekomme små brud på de områder?

Er et område altid bestemt af samme (unikke) farve?

Et skud fra hoften kunne være at gennemgå billeddata først kolonnevis fra venstre kolonne og se hvornår der horisontalt kommer en start på et område. Dernæst fra top mod bund rækkevis og se hvornår det starter der (ingen grund til at gemme alle de andre data). Hvis det er vigtigt at gemme hvor de startede (hvilken kolonne og hvilken række), så kan du gemme de to værdier en et par variable (leftoffset og topoffset). Dernæst læser du og undersøger hvornår området holder op - og stopper med at gemme info om billedet når der ikke er mere af den farve i højre side og under området.

Så kan du forfine det og fjerne / undlade at registrere de pixels der ligger uden for området (hvis det er andet end firkanter der definerer et område).

Pas på hvis der er flere områder på et billede - for der skal du holde styr på hvilket område du har gang i. Evt. ta' et kopi af billedet og når du har registreret ét område, så "nulstiller" du det område med en "neutral" farve så du kan køre forfra og tjekke næste område ( evt. blot starte fra det offset du gemte).

Overvej også hvor stor betydning det har med billeder der indeholder forkert info (brudte områdedefinitioner) osv.
Avatar billede x4all_dk Nybegynder
23. august 2004 - 13:46 #2
Hele "kortet" består af flere polygoner, som har unikke farve.
Som eksempel kan jeg nævne et "dybde" kort over en sø.

Spørgsmålet for mig er "Hvordan kan jeg 'læse' BMP billeder fra Delphi?" så jeg kan komme videre.
Avatar billede kammeyer Nybegynder
24. august 2004 - 09:14 #3
Ja - jeg har ikke selv rodet med det, men .... prøv at placere en TImage komponent til at starte med og tjekke dens properties til du finder noget bitmap. Den burde have en method der hedder LoadFromFile() der kan hente billedet ind - ellers har en af dens properties en LoadFromFile.

Jeg er ikke klar over hvad TImage gør - om der er for meget overhead i komponenten til dit behov, men ellers kan du søge på google.com og finde formatet / specifikationen for .bmp filer så du selv kan indlæse .bmp filer tegn for tegn.

Prøv at se på Image1.Picture.Bitmap.ScanLine[y] - det burde være pixel-rækkerne du fanger.

http://www.wotsit.org/search.asp?s=graphics <--- et sted med info om filers opbygning / struktur.
Avatar billede x4all_dk Nybegynder
04. september 2004 - 14:01 #4
ScanLine[y]  kan garanteret bruges, men jeg kan ikke finde ud af at aflæse hver pixel... som desværre er mit problem.

Er der ingen som kan skrive lidt kode som kan?
Avatar billede x4all_dk Nybegynder
04. september 2004 - 14:33 #5
Jeg fandt en artikel på nettet som hjalp mig.

http://www.cpcug.org/user/clemenzi/technical/Languages/Delphi/Images.html
Avatar billede hrc Mester
12. september 2004 - 00:54 #6
x4all_dk: Lukker du så ikke spørgsmålet?
Avatar billede x4all_dk Nybegynder
18. september 2004 - 13:23 #7
Abitmap.Canvas.Pixels[x,y] retunere et BMP pixel x,y
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