03. marts 2009 - 01:08Der er
4 kommentarer og 1 løsning
pixel mønster
den her er godt nok en tung en for mig at lave
jeg vil lave en funktion der kan lede efter hvide rammer( i et bitmap ) tænkte på om man mon kunne gøre noget i stil med således. hvis man nu vil lede efter rammer der er eks. 20*24 pixel store. der må gerne være farve pixel inde i "kassen" Color white = Color.FromArgb(255, 255, 255, 255); //hvid ramme
for (int h = 0; h < myBitmap.Height; h++) { pixelid = pixelid + 1; Color pixelColor = myBitmap.GetPixel(h, l);
if (pixelcolor==white) {
int punkt1 = pixelid; // hvad skal næste skridt være...her går jeg i stå }
har som i kan se herover lavet en for løkke der kigger i en lodret pixel række og finder den den første hvide prik så akl den lede efter sit firkantet mønster på 20*24.
Altså jeg tænker du skal bruge 4 nestede loops der hver checker deres område.
2 der checker kanterne og 2 der checker top og bund (- den del af kanterne der allerede er checket)
Jeg ser to andre muligheder; 1. kopier billedet til et midlertidigt bitmap og mal den inderte del hvid og så check samtlige pixels. 2. Check en streg eller 2 på hver ramme-side og så antage at resten er hvidt hvis stregerne er hvide (det vil øge performance)
hvis du er sikker på at der ikke er andre hvide pixels i billedet så ville min fremgangsmåde nok være i først omgang, at finde frem til det øverste venstre hjørne af rektanglet. Det kan gøres ved at løbe 2 nested loops igennem og af billdets width og height, og så huske de indeks hvor man møder den første hvide pixel.
Point p = new Point(-1,-1); for(int y = 0; y < bitmap.Height; y++) { for(int x = 0; x < bitmap.Width; x++) { if(bitmap.GetPixel(x,y) == Color.White) { p = new Point(x,y); break; } }
if(p.X > - 1) break; }
Derefter findes width og height af det hvide rektangel.
Size size = new Size(0,0); for(int x = p.X; x < bitmap.Width; x++) { if(bitmap.GetPixel(x. p.Y) != Color.White) { size.Width = x - p.X; break; } }
for(int y = p.Y; y < bitmap.Height; y++) { if(bitmap.GetPixel(p.X. y) != Color.White) { size.Height = y - p.Y; break; } }
Nu har du startpunkt, p, og størrelsen, size, for det hvide rektangel og så kan du jo gøre som du vil med det :-)
Det kan godt gøre på mindre kode, men det her er vist det mest overskuelige...
ANXII det er et rigtigt godt bud du har kommet med.
Men det er faktisk kun selve rammen i recten jeg ønsker at kontroller om er hvid.
jeg har lavet nu ( ud fra noget af dit forslag så jeg kan finde alle pixel der er hvide.
jeg mangler så nu at få stykket sammen, at den med den pixel hvide pixel som den lige har fudnet kontrolellere pixel ud fra de "fundet" pixlens cordinat.
så man i den stil her har en cordinat liste man kan løbe igenne for at se om alle yderpunkterne er hvide
y-aksen
1123456789111213141 2 2 3 3 4 4 5 5 6 6 x 7 7 8 8 a 9 9 k 10 10 s 11 11 e 12 12 n 13 13 14 14 15 15 161234567891011121316
så alt det ydre skal i et array på en eller anden MYSTISK måde
alle forslag er velkomne :)
en måde er jo at lave en masse manuelt oprette arrays men der må være en matematisk formel der kan klare det runtime
Ja så hvis man looper igennem efter hvide pixels. så når den finder en hvid pixel skal den smide cordinaterne som svarer til en ramme ind i dette array startene med dette pixel som det første hjørne. så kan man loope dette array igennem bagefter for at tjekke om alle de pixel der danne denne tynde omkreds på denne rectangel
har fundet frem til det her men har bøvl med arrayet. den bliver kørt når den støder på en hvid pixel...
men har bøvl med at få den til at lade være med at komme med ourtof bounds fejl og NULL referrence fejl... syntes jeg har prøvet alt nu.
så vender lige tilbage
Synes godt om
Ny brugerNybegynder
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.