SlideServe
Menu
Préférences
© SlideServe · v2026

Mastering Picture Mirroring Techniques in Computer Science Engineering

asa avatar
20 diapositives · 297 Views · Sep 12, 2014

Learn advanced concepts of mirroring images around vertical and horizontal axes to enhance your programming skills. Dive into code challenges and understand the importance of pixel orders. Get ready to excel in computer graphics and image processing.

Mastering Picture Mirroring Techniques in Computer Science Engineering - slide 1
01 / 20Mastering Picture Mirroring Techniques in Computer Science Engineering
1 / 17

Télécharger la présentation

Mastering Picture Mirroring Techniques in Computer Science Engineering
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. CSE 8A Lecture 8 • Reading for next class: None • Prepare for In-term exam 2 • PSA4: Collage and Picture Flip: DON’T WAIT, it’s harder than the previous PSAs. • PSA3 Interview, deadline tomorrow! CLICKERS OUT!

  2. Mirroring Even Width versus Odd Width int mirrorPt = getWidth() / 2; ... for (int x = 0; x < mirrorPt; x++)

  3. Solo: (30 sec) • Discuss: (2min) • Group: (30 sec) Mirroring Odd-width Pictures • What happens when this code attempts to mirror a Picture around the vertical axis when the Picture’s width is odd (e.g. 101)? int mirrorPt = getWidth()/2; Pixel leftP, rightP; for (int y = 0; y < getHeight(); y++) { for (int x = 0; x < mirrorPt; x++) { leftP = getPixel(x,y); rightP = getPixel(getWidth()-1-x,y); rightP.setColor(leftP.getColor()); } } • It will work fine • It will run, but it won’t mirror correctly • I won’t run, there will be an index out of bounds exception • It won’t even compile if getWidth() is odd

  4. Mirror versus “flip” (PSA4) (around vertical axis) mirror flip original

  5. Solo: (30 sec) • Discuss (1 min) • Group What are the first (x,y) coords for topP and bottomP to mirror around horizontal axis? topP bottomP A. (0,0) (0,3) (0,1) (0,2) (1,0) (1,3)B. (0,0) (0,3) (1,0) (1,3) (2,0) (2,3) Does it matter bottom into top Or top into bottom? NO What would assignment statements be? C. either A or B will workD. none of the above

  6. Challenge: Complete the code that mirrors in the order specified by answer B topP bottomPB. (0,0) (0,3) (1,0) (1,3) (2,0) (2,3) int height = getHeight(); int width = getWidth(); int mid = height/2; Pixel topP, botP; for ( ){ for( ) { topP = getPixel( ); botP = getPixel( ); botP.setColor(topP.getColor()); } }

  7. Order of copying pixels • When mirroring, we need to copy certain pixels to certain other pixels • It doesn’t matter what order we copy in, as long as when we are done, pixels have been copied correctly • Two most common orders: • Row major order: copy all the pixels in one row, then go on to the next row • Column major order: copy all the pixels in one column, then go on to the next column Does it matter bottom into top Or top into bottom? NO What would assignment statements be?

  8. Mirroring around horizontal axis topP botPA. (0,0) (0,3) (0,1) (0,2) (1,0) (1,3) … … column-major order row-major order int height = getHeight(); int width = getWidth(); int mid = height/2; Pixel topP, botP; for(int x=0; x<width; x++) { for(int y=0; y<mid; y++) { topP = getPixel(x,y); botP = getPixel(x,height-1-y); // copy one to the other… } } int height = getHeight(); int width = getWidth(); int mid = height/2; Pixel topP, botP; for(int y=0; y<mid; y++) { for(int x=0; x<width; x++) { topP = getPixel(x,y); botP = getPixel(x,height-1-y); // copy one to the other… } } Does it matter bottom into top Or top into bottom? NO What would assignment statements be? topP botPB. (0,0) (0,3) (1,0) (1,3) (2,0) (2,3) … …

  9. Solo: (1 min) • Discuss: (2 min) • Group: (30 sec) Challenge: What does this code do? • Hint: trace some of the getPixel index values. Copies top half into bottom half not mirrored. Copies left half into right half not mirrored. Mirrors around vertical axis, left into right Mirrors around horizontal axis, top into bottom Some other bizarre transformation int magic = getWidth()/2; Pixel foo, bar; for(int y = 0; y < getHeight(); y++) { int countingDown = getWidth()-1; for(int x = 0; x < magic; x++) { foo = getPixel(x,y); bar = getPixel(countingDown,y); bar.setColor(foo.getColor()); countingDown--; } }

  10. Solo: (1 min) • Discuss: (2 min) • Group: (30 sec) Challenge: What does this code do? • Hint: trace some of the getPixel index values. foo bar int magic = getWidth()/2; Pixel foo, bar; for(int y = 0; y < getHeight(); y++) { int countingDown = getWidth()-1; for(int x = 0; x < magic; x++) { foo = getPixel(x,y); bar = getPixel(countingDown,y); bar.setColor(foo.getColor()); countingDown--; } } x y countingDown

  11. By what variable name do we refer to collage inside makeC in Picture.java? • collage • callingObject • Object • Picture • this public class Lab4 { public static void main(String[] args) { Picture collage = new Picture("blank.jpg"); Picture p = new Picture("bird1.jpg"); Picture q = new Picture("bird2.jpg"); collage.makeC(p,q); } } public class Picture { public void makeC(Picture p1, Picture p2) { Pixel[] targetPixels = _______.getPixels(); // … more code } }

  12. Match the scenario to the constructor call (we’ll vote for each scenario) Scenario Call Picture p = new Picture(); Picture p = new Picture("filename.jpg"); Picture p = new Picture(other); Picture p = new Picture(aNum,bNum); • Create a picture from a specific file • Create a picture that is a copy of another picture • Create a picture of a given width and height • Create a picture of the same width and height as another picture

  13. Solo: (1 min) • Discuss: (2 min) • Group: (30 sec) What does this code do? Makes red box of width height Pixel foo; for(int y = 40; y < 50; y++) { for(int x = 1 ; x < 5; x++) { foo = getPixel(x,y); foo.setColor(Color.RED); } }

  14. Solo: (1 min) • Discuss: (2 min) • Group: (30 sec) What does this code do? Makes red box of width height Pixel foo; for(int y = 40; y < 50; y++) { for(int x = 1 ; x <= 5; x++) { foo = getPixel(x,y); foo.setColor(Color.RED); } }

  15. Solo: (1 min) • Discuss: (2 min) • Group: (30 sec) What are correct loops to make a black box of width x and height y? C and B Ask what is start with 1? public void foo(int x, int y) { Pixel foo; <<<<LOOP HEADER 1>>>> { <<<<LOOP HEADER 2>>>> { foo = getPixel(w,h); foo.setColor(Color.BLACK); } } } A) for (int w = 0; w <= x; w++) for (int h = 0; h <= y; h++) B) for (int w = 10; w < x+10; w++) for (int h = 20; h < y+20; h++) C) for (int w = 0; w < y; w++) for (int h = 0; h < x; h++) D) for(int w = 10; w <= x+10; w++) for(int h = 20; h <= y+20; h++)

  16. From the book: Cropping A Picture (page 147-148) – we’ll change a bit • Example of: • Working with both the calling object and a parameter object in a method • Extra information is passed to methods through parameters. The calling object is something like an extra parameter, named this • Doing something to a subset of the possible pixels in a picture

  17. Solo: (1 min) • Discuss: (2 min) • Group: (30 sec) What part of Katie are we copying?(slight mod from the book) public void copyKatiesXXX(Picture sourcePic) { Pixel sPixel = null, tPixel = null; for (int sX = 40, tX = 100; sX < 110; sX++, tX++) { for (int sY = 350, tY = 100; sY < 400; sy++, tY++) { sPixel = sourcePic.getPixel(sX,sY); tPixel = this.getPixel(tX,tY); tPixel.setColor(sPixel.getColor(); } } } Draw where putting it in calling object Feet Part of dress Hands Part of Couch Face

  18. Parameters: getting information in to methods • It’s nice to have code that is “user controllable”… • We have been hard-coding constants (40, 3, 100, for example) a lot, but we can write more flexible code using PARAMETERS • This lets us write code to do things like “cropping and pasting into a blank canvas”, but letting the user specify what part of the source picture to crop, and where to place it in the canvas.

  19. Underline the values you would change into parameters and write a new method header public void copyKatiesXXX( ) { Pixel sPixel, tPixel = null; for (int sX = 40, tX = 100; sX < 110; sX++, tX++) { for (int sY = 350, tY = 100; sY < 400; sy++, tY++) { sPixel = sourcePic.getPixel(sX,sY); tPixel = this.getPixel(tX,tY); tPixel.setColor(sPixel.getColor(); } } }

  20. TODO • Study for In-term Exam 2 • Start PSA4: Collage and Picture Flip • Don’t forget your PSA3 interview!