Added many GUI elements. Erosion/dilation added.
This commit is contained in:
@@ -6,6 +6,7 @@ set(AIGO_SRCS
|
||||
settings.cpp
|
||||
state.cpp
|
||||
image.cpp
|
||||
mask.cpp
|
||||
)
|
||||
|
||||
#find SDL and its related libraries
|
||||
|
||||
+57
-4
@@ -12,17 +12,70 @@ namespace Image
|
||||
((uint32_t*)image->pixels)[i] = 0xffffffff;
|
||||
else
|
||||
((uint32_t*)image->pixels)[i] = 0xff000000;
|
||||
//gray | (gray << 8) | (gray << 16);
|
||||
//gray | (gray << 8) | (gray << 16);
|
||||
|
||||
}
|
||||
}
|
||||
void dilation(SDL_Surface *dest, SDL_Surface *src, Mask::mask *mask)
|
||||
{
|
||||
for (int y = mask->size / 2; y < dest->h - mask->size / 2; ++y)
|
||||
{
|
||||
for (int x = mask->size / 2; x < dest->w - mask->size / 2; ++x)
|
||||
{
|
||||
bool whiteFound = false;
|
||||
for (int i = 0; i < mask->size && !whiteFound; ++i)
|
||||
{
|
||||
for (int j = 0; j < mask->size && !whiteFound; ++j)
|
||||
{
|
||||
if (mask->mask[i*mask->size + j] &&
|
||||
PXR(PX(src, x - mask->size / 2 + i, y - mask->size / 2 + j))
|
||||
)
|
||||
{
|
||||
whiteFound = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (whiteFound)
|
||||
((uint32_t*)dest->pixels)[y*dest->w+x] = 0xffffffff;
|
||||
else
|
||||
((uint32_t*)dest->pixels)[y*dest->w+x] = 0xff000000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void erosion(SDL_Surface *dest, SDL_Surface *src, Mask::mask *mask)
|
||||
{
|
||||
for (int y = mask->size / 2; y < dest->h - mask->size / 2; ++y)
|
||||
{
|
||||
for (int x = mask->size / 2; x < dest->w - mask->size / 2; ++x)
|
||||
{
|
||||
bool blackFound = false;
|
||||
for (int i = 0; i < mask->size && !blackFound; ++i)
|
||||
{
|
||||
for (int j = 0; j < mask->size && !blackFound; ++j)
|
||||
{
|
||||
if (mask->mask[i*mask->size + j] &&
|
||||
!PXR(PX(src, x - mask->size / 2 + i, y - mask->size / 2 + j))
|
||||
)
|
||||
{
|
||||
blackFound = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (blackFound)
|
||||
((uint32_t*)dest->pixels)[y*dest->w+x] = 0xff000000;
|
||||
else
|
||||
((uint32_t*)dest->pixels)[y*dest->w+x] = 0xffffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SDL_Surface *copySurface(SDL_Surface *s)
|
||||
{
|
||||
SDL_Surface *copy = SDL_CreateRGBSurface(SDL_SWSURFACE, s->w, s->h,
|
||||
s->format->BitsPerPixel,
|
||||
s->format->Rmask, s->format->Gmask,
|
||||
s->format->Bmask, s->format->Amask);
|
||||
s->format->BitsPerPixel,
|
||||
s->format->Rmask, s->format->Gmask,
|
||||
s->format->Bmask, s->format->Amask);
|
||||
SDL_BlitSurface(s, NULL, copy, NULL);
|
||||
return copy;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define _IMAGE_H_
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
#include "mask.h"
|
||||
|
||||
// get pixel/something in array p of size w*h
|
||||
#define PX_(p, x, y, w, h) ((p)[(x)+(y)*(w)])
|
||||
@@ -22,6 +23,8 @@ namespace Image
|
||||
{
|
||||
|
||||
void threshold(SDL_Surface *image, int lowerBound, int upperBound);
|
||||
void erosion(SDL_Surface *dest, SDL_Surface *src, Mask::mask *mask);
|
||||
void dilation(SDL_Surface *dest, SDL_Surface *src, Mask::mask *mask);
|
||||
SDL_Surface *copySurface(SDL_Surface *s);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user