Next time you snap a picture, you realize you are capturing millions of pixels into a buffer. The buffer data is read and converted into JPEG in real time. Each pixel in that buffer is an unsigned int (four bytes ): Alpha, Blue, Green, and Red. Let us ignore alpha for now. As you know, a unsigned byte can have a value 0 to 255. In remote sensing jargons, it is called blue channel, green channel, and red channel. Each channel provides valuable information such as, say farm lands, forest fire, drought, landscape, diseases , If a pixel has a value (say in hex) = 0x00a1b1c1 , then 0xc1 is the red pixel, 0xb1 is the green pixel, 0xa1 is the blue and 00 is the alpha. #define RED 1 #define GREEN 2 #define BLUE 3 then, develop a function void calculateSum ( unsigned int *ptr , int count , unsigned char channel , unsigned int *sum, float *average ) { *sum = 0; if (channel == RED ) calculate sum and average for red channel else if (channel == GREEN ) calculate sum and average for green channel if (channel == BLUE ) calculate sum and average for blue channel } main ( ) { sum = 0; average = 0; calculateSum ( buffer, 16 , RED, &sum, &average ) sum = 0; average = 0; calculateSum ( buffer, 16 , GREEN, &sum, &average ) sum = 0; average = 0; calculateSum ( buffer, 16 , BLUE, &sum, &average ) Print all values You can reuse the code you did previous assignment to calculate the red, green and blue values }
Next time you snap a picture, you realize you are capturing millions of pixels into a buffer. The buffer data is read and converted into JPEG in real time. Each pixel in that buffer is an unsigned int (four bytes ): Alpha, Blue, Green, and Red. Let us ignore alpha for now. As you know, a unsigned byte can have a value 0 to 255. In remote sensing jargons, it is called blue channel, green channel, and red channel. Each channel provides valuable information such as, say farm lands, forest fire, drought, landscape, diseases ,
If a pixel has a value (say in hex) = 0x00a1b1c1 , then 0xc1 is the red pixel, 0xb1 is the green pixel, 0xa1 is the blue and 00 is the alpha.
#define RED 1
#define GREEN 2
#define BLUE 3
then, develop a function
void calculateSum ( unsigned int *ptr , int count , unsigned char channel , unsigned int *sum, float *average )
{
*sum = 0;
if (channel == RED )
calculate sum and average for red channel
else
if (channel == GREEN )
calculate sum and average for green channel
if (channel == BLUE )
calculate sum and average for blue channel
}
main ( )
{
sum = 0;
average = 0;
calculateSum ( buffer, 16 , RED, &sum, &average )
sum = 0;
average = 0;
calculateSum ( buffer, 16 , GREEN, &sum, &average )
sum = 0;
average = 0;
calculateSum ( buffer, 16 , BLUE, &sum, &average )
Print all values
You can reuse the code you did previous assignment to calculate the red, green and blue values
}
Trending now
This is a popular solution!
Step by step
Solved in 2 steps