Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 16.03.2010, 00:40 Titel: Farbe suchen und addieren |
|
|
Hallo zusammen,
ich hab jetzt eine Datei, deren Inhalt Zeile für Zeile für 1 Pixel steht.
z.B. so
Zeile 1 = ff0000
Zeile 2 = ff0000
Zeile 3 = ff0000
Zeile 4 = ff0000
Zeile 5 = 00ff00
Zeile 6 = 00ff00
Zeile 7 = ff0000
Zeile 8 = ff0000
Zeile 9 = 00ff00
Selbstverständlich ist das jetzt nur mal so hergenommen.
In der Datei sind natürlich viel mehr Farben drin vertreten.
Nun möchte ich wissen, wie oft die Farbe ff0000 und die Farbe 00ff00 vorkam.
Ich hatte folgendes gedacht "will aber nicht" :
Code: |
screenres 300,300,32
redim array (1 to 10000000) as string
redim addierung(1 to 10000000) as integer
redim pixel (1 to 10000000) as string
dim a as integer
dim aaa as integer
dim i as integer
dim ii as integer
dim aa as integer
kill "C:\Bild1+.bin"
open "C:\Bild1.bin" for input as #1
do
a = a + 1
input #1, array(a)
loop until eof(1)
close #1
open "C:\Bild1+.bin" for input as #1
'eine Schleife von 1 bis Zeilende
'Zeilende ist - 2, da in den letzten 2 Zeilen noch was anderes steht
for i = 1 to a-2
'hier wird herausgefunden, wie weit das Pixel array schon geschrieben wurde
input #1, aa
'eine Schleife von 0 nach Anzahl Pixelarray
for ii = 0 to aa+1
'wenn das nächste Pixel schon im Pixelarray liegt, addieren
if array(i) = pixel(ii) then
addierung(ii) = addierung(ii) + 1
'ansonsten den Pixelwert in das Pixelarray schreiben
else
aaa = aa + 1
open "C:\Bild1+.bin" for output as #2
print #2, aaa
close #2
pixel(aaa) = array(i)
end if
next
next
close #1
'und hier das gelump anzeigen
for i = 1 to 10
print pixel(i)
next
sleep
|

Zuletzt bearbeitet von Andy19312 am 16.03.2010, 01:09, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.03.2010, 01:03 Titel: |
|
|
Das Programm tut in der Tat etwas ganz anderes, als du haben willst. Warum schreibst du nicht ein anderes Programm, was genau das tut, was du willst? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 16.03.2010, 01:05 Titel: |
|
|
@Jojo weil ich immer wieder den gleichen Denkfehler habe und es nicht hinbekomme |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 16.03.2010, 16:26 Titel: |
|
|
Code: | KILL "C:\Bild1+.BIN"
OPEN "C:\Bild1.BIN" FOR INPUT AS #1
DO
a = a + 1
INPUT #1, array(a)
LOOP UNTIL EOF(1)
CLOSE #1
OPEN "C:\Bild1+.BIN" FOR INPUT AS #1 |
Ich nehme mal an, Bild1+.BIN hat zu diesem Zeitpunkt 0 Zeilen, weil die Datei vorhin gelöscht wurde? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 16.03.2010, 20:07 Titel: |
|
|
jepp |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.03.2010, 21:56 Titel: |
|
|
dir ist schon klar, dass es dann auch nix zum Auslesen mit INPUT gibt? So viel Logikverstand musst du doch noch haben... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 16.03.2010, 22:05 Titel: |
|
|
Im nächsten Schleifendurchlauf, müsste er normalerweise mit input was haben
Wenn er in das Array was geschrieben hat |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.03.2010, 22:07 Titel: |
|
|
von nichts kommt nichts - du kannst aus einer leeren datei keine daten lesen! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 17.03.2010, 13:44 Titel: |
|
|
12:00
Guden,
werde nachher den Code online stellen "ich meine, dass ich mich zurzeit auf dem richtigen Pfad befinde".
13:00
Es war zwar der richtige Pfad gewesen, aber keine Ahnung, ob es eine schnellere Möglichkeit gibt:
Code: |
screenres 400,400,32
redim array (1 to 10000000) as string
redim what (1 to 10000000) as string
redim pixel (1 to 10000000) as integer
redim gefundene (1 to 10000000) as string
dim a as ulongint
dim b as ulongint
dim c as ulongint
dim i as ulongint
dim ii as ulongint
dim addieren as ulongint
dim prellung as single
OPEN "C:\Bild1.BIN" FOR INPUT AS #1
DO
a = a + 1
INPUT #1, array(a)
LOOP UNTIL EOF(1)
CLOSE #1
for i = 1 to a-2
for ii = i to a-2
if array(i) = array(ii) then
addieren = addieren +1
if prellung = 0 then
b = b + 1
what(b) = array(i)
prellung = 1
end if
end if
next
pixel(i) = addieren
addieren = 0
prellung = 0
next
for i = 1 to b
for ii = 1+i to b
if what(i) = what(ii) then
what(ii) = ""
end if
next
next
for i = 1 to b
if len(what(i)) > 0 then
c = c + 1
gefundene(c) = what(i)+" "+str(pixel(i))
end if
next
OPEN "C:\gefundene.BIN" FOR OUTPUT AS #2
for i = 1 to c
PRINT #2, gefundene(i)
next
CLOSE #2
print "Es wurden ";c;" unterschiedliche Farben gefunden :D"
sleep
|
Mal gucken, der Code ist ziemlich rechenaufwendig für ein Bild, bei dem mehrere Farben drinne vorkommen
Cu Andy |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 17.03.2010, 19:32 Titel: |
|
|
Ich habe mich jetzt nicht wirklich in den Code hineindenken können, auf jeden Fall wächst der Aufwand quadratisch zur Anzahl der Dateizeilen. Linear wäre wesentlich besser; dazu hätte ich von Anfang an anders gezählt.
Code: | OPEN "C:\Bild1.BIN" FOR INPUT AS #1
for i = 1 to a-2
INPUT #1, farbe
if farbenhaeufigkeit(val("&h" & farbe)) = 0 then farbenzahl += 1
farbenhaeufigkeit(val("&h" & farbe)) += 1
next
CLOSE #1 |
farbenhaeufigkeit zählt, wie oft welche Farbe vorkommt. farbenzahl wäre dann die Anzahl unterschiedlicher Farben.
Nachteil ist, dass du ein Array mit 2^24 Elementen brauchst. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 17.03.2010, 19:39 Titel: |
|
|
Das ist glaube ich heutzutage weniger ein Problem. 64 MB sind nicht so unglaublich viel... Und die werden ja eh nur dann angefordert, wenn das Array nach und nach gefüllt wird. |
|
Nach oben |
|
 |
|