Avatar billede glenn007 Nybegynder
03. marts 2009 - 01:08 Der 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.

men hvordan fortæller man den det
Avatar billede anri Novice
04. marts 2009 - 07:24 #1
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)
Avatar billede annxii Nybegynder
04. marts 2009 - 08:09 #2
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...
Avatar billede glenn007 Nybegynder
04. marts 2009 - 20:24 #3
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
Avatar billede annxii Nybegynder
05. marts 2009 - 12:45 #4
jeg er ikke helt sikker på at jeg forstår hvad det er du gerne vil nu. Vil du have koordinaterne for alle de hvide pixels i din ramme ind i et array?
Avatar billede glenn007 Nybegynder
05. marts 2009 - 14:19 #5
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
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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