haraldhv
/
aigo
Archived
1
0
Fork 0
This repository has been archived on 2024-07-04. You can view files and clone it, but cannot push or open issues or pull requests.
aigo/lib/image.cpp

85 lines
2.1 KiB
C++
Raw Permalink Normal View History

#include "image.h"
namespace Image
{
void threshold(SDL_Surface *image, int lowerBound, int upperBound)
{
int x, y;
for (int i = 0; i < image->w * image->h; ++i)
{
int gray = GRAY(((uint32_t*)image->pixels)[i]);
if (gray > lowerBound && gray < upperBound)
((uint32_t*)image->pixels)[i] = 0xffffffff;
else
((uint32_t*)image->pixels)[i] = 0xff000000;
//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;
}
}
}
2007-03-01 14:00:51 +01:00
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);
2007-03-01 14:00:51 +01:00
SDL_BlitSurface(s, NULL, copy, NULL);
return copy;
}
}