Grafické formáty a redukce barevného prostoru obrazu

student.cpp

////////////////////////////////////////////////////////////////////////////////////////////////
// Vzorove reseni
////////////////////////////////////////////////////////////////////////////////////////////////
 
////////////////////////////////////////////////////////////////////////////////////////////////
// include 
 
#include "main.h"
#include <assert.h>
#include <stdlib.h>
 
 
////////////////////////////////////////////////////////////////////////////////////////////////
// Funkce vyplnene ve cvicenich
////////////////////////////////////////////////////////////////////////////////////////////////
 
////////////////////////////////////////////////////////////////////////////////////////////////
// funkce prevede obrazek na urovne sedi
//
 
void GreyScale()
{
	S_RGBA color;
	double luma;
	for (int x = 0; x < frame_w; x++) {
		for (int y = 0; y < frame_h; y++) {
			GetPixel(x, y, color);
			luma = 0.299 * color.red + 0.587 * color.green + 0.114 * color.blue;
			color.red = ROUND(luma);
			color.green = ROUND(luma);
			color.blue = ROUND(luma);
			PutPixel(x, y, color);
		}
	}
}
 
////////////////////////////////////////////////////////////////////////////////////////////////
// funkce prevede obrazek na cernobily
//
// Threshold    - prah
//
 
void Prahovani(int Threshold)
{
	S_RGBA color;
	double luma;
	for (int x = 0; x < frame_w; x++) {
		for (int y = 0; y < frame_h; y++) {
			GetPixel(x, y, color);
			luma = 0.299 * color.red + 0.587 * color.green + 0.114 * color.blue;
			if (luma <= Threshold) {
				PutPixel(x, y, COLOR_BLACK);
			} else {
				PutPixel(x, y, COLOR_WHITE);
			}
		}
	}
}
 
 
////////////////////////////////////////////////////////////////////////////////////////////////
// Funkce za domaci ukol
////////////////////////////////////////////////////////////////////////////////////////////////
 
 
////////////////////////////////////////////////////////////////////////////////////////////////
// funkce prevede obrazek na cernobily
// pomoci matice metodou DITHERINGU, velikost obrazku se tedy nemeni!
// pouzijte promenne definovane v main.h:
//    VelikostMatice - rozmer ctvercove matice
//    Matice[][]     - hodnoty pro porovnavani
//
 
void RozptylMatice()
{
	S_RGBA color;
	double luma;
	for (int x = 0; x < frame_w; x++) {
		for (int y = 0; y < frame_h; y++) {
			GetPixel(x, y, color);
			luma = 0.299 * color.red + 0.587 * color.green + 0.114 * color.blue;
			if (luma <= Matice[x % VelikostMatice][y % VelikostMatice]) {
				PutPixel(x, y, COLOR_BLACK);
			} else {
				PutPixel(x, y, COLOR_WHITE);
			}
		}
	}
}