Added many GUI elements. Erosion/dilation added.

This commit is contained in:
2007-03-01 13:18:20 +00:00
parent 6b380ae5e7
commit c5baa69dc5
6 changed files with 280 additions and 76 deletions
+1
View File
@@ -6,6 +6,7 @@ set(AIGO_SRCS
settings.cpp
state.cpp
image.cpp
mask.cpp
)
#find SDL and its related libraries
+57 -4
View File
@@ -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;
}
+3
View File
@@ -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);
}