cp1
This commit is contained in:
@@ -8,7 +8,7 @@ A **GIF** (Graphics Interchange Format) is a popular bitmap image format commonl
|
|||||||
|
|
||||||
## GIF Frames and Animation
|
## GIF Frames and Animation
|
||||||
|
|
||||||
A GIF file is made up of a series of **frames**. Each frame is a static image that, when displayed in sequence, creates the illusion of movement. The concept of frames in a GIF is similar to how traditional film or digital video works, where individual frames are shown at a rapid pace to simulate continuous motion.
|
A GIF image fileis composed of a sequence of **frames**. Each frame is a static image that, when displayed in sequence, creates the illusion of movement. The concept of frames in a GIF is similar to how traditional film or digital video works, where individual frames are shown at a rapid pace to simulate continuous motion.
|
||||||
|
|
||||||
### Key Concepts:
|
### Key Concepts:
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ A GIF file is made up of a series of **frames**. Each frame is a static image th
|
|||||||
|
|
||||||
## Lab Tasks
|
## Lab Tasks
|
||||||
|
|
||||||
In this lab, you will modify an existing C++ program. This program reverse a GIF file.
|
In this lab, you will modify an existing C++ program. This program reverse a GIF image file.
|
||||||
|
|
||||||
Here are examples of reversing GIF.
|
Here are examples of reversing GIF.
|
||||||
|
|
||||||
@@ -38,10 +38,37 @@ Example 4:
|
|||||||
|
|
||||||
This is the [original GIF](brick_real.gif). And this is the [reversed GIF](brick_fake.gif)
|
This is the [original GIF](brick_real.gif). And this is the [reversed GIF](brick_fake.gif)
|
||||||
|
|
||||||
|
## Starter Code
|
||||||
|
|
||||||
|
The starter code [main.cpp](main.cpp) defines a class named GifFrame to represents GIF frames. Each object of this class represents one frame.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class GifFrame {
|
||||||
|
public:
|
||||||
|
std::vector<uint8_t> data; // raw image data
|
||||||
|
int width, height; // frame dimensions
|
||||||
|
int left, top; // position within the GIF
|
||||||
|
uint8_t disposalMethod = 0; // add this field (0 = undefined, 1 = keep, etc.)
|
||||||
|
bool hasTransparency = false; // flag for transparency
|
||||||
|
uint8_t transparentColorIndex = 0; // index of the transparent color in the global color table
|
||||||
|
uint16_t delayTime = 0; // delay time before the next frame in hundredths of a second
|
||||||
|
// default constructor
|
||||||
|
GifFrame() : width(0), height(0), left(0), top(0), disposalMethod(0),
|
||||||
|
hasTransparency(false), transparentColorIndex(0), delayTime(0) {}
|
||||||
|
// constructor to initialize the frame data
|
||||||
|
GifFrame(const std::vector<uint8_t>& frameData) : data(frameData), disposalMethod(0),
|
||||||
|
hasTransparency(false), transparentColorIndex(0), delayTime(0) {}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
When given an input GIF image file, the starter code extracts all frames from this image file, and store these frames in a std::vector<GifFrame> named frames. This frames vector will then be passed to a function *reverseFrames* which reverses the vector. The *reverseFrames* function will return an std::vector<GifFrame> which contains the reversed frames. This reversed frames vector is then passed to a function writeGif(), which just writes all frames in a new GIF image file.
|
||||||
|
|
||||||
|
In this lab, you will only be working on the *reverseFrames* function.
|
||||||
|
|
||||||
## Checkpoint 1A: Reverse with STL Vector Swaps
|
## Checkpoint 1A: Reverse with STL Vector Swaps
|
||||||
*estimate: TBD*
|
*estimate: TBD*
|
||||||
|
|
||||||
Read the starter code [main.cpp](main.cpp) and re-write the function *reverse* that reverses the contents of an STL vector of GIF.
|
Read the starter code [main.cpp](main.cpp) and re-write the function *reverseFrames* that reverses the contents of an STL vector of GIF.
|
||||||
|
|
||||||
For this checkpoint, use indexing/subscripting/[] on the vector, not iterators (or pointers). You may not use a second vector or array or list.
|
For this checkpoint, use indexing/subscripting/[] on the vector, not iterators (or pointers). You may not use a second vector or array or list.
|
||||||
The trick is to step through the vector one location at a time, swapping values between the first half of the
|
The trick is to step through the vector one location at a time, swapping values between the first half of the
|
||||||
|
|||||||
Reference in New Issue
Block a user