소스 검색

* opencv.c: bring the OpenCV codec up to date.

git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@2631 92316355-f0b4-4df1-b90c-862c8a59935f
remotes/tiles
sam 16 년 전
부모
커밋
af15db52cb
2개의 변경된 파일34개의 추가작업 그리고 43개의 파일을 삭제
  1. +4
    -3
      pipi/codec.c
  2. +30
    -40
      pipi/codec/opencv.c

+ 4
- 3
pipi/codec.c 파일 보기

@@ -46,12 +46,13 @@ void pipi_free(pipi_image_t *img)
if(i != img->codec_format && img->p[i].pixels)
free(img->p[i].pixels);

if(img->codec_priv)
#if USE_SDL
pipi_free_sdl(img);
pipi_free_sdl(img);
#elif USE_IMLIB2
pipi_free_imlib2(img);
pipi_free_imlib2(img);
#elif USE_OPENCV
pipi_free_opencv(img);
pipi_free_opencv(img);
#endif

free(img);


+ 30
- 40
pipi/codec/opencv.c 파일 보기

@@ -34,51 +34,21 @@
pipi_image_t *pipi_load_opencv(const char *name)
{
pipi_image_t *img;
IplImage *priv = cvLoadImage(name, -1);
IplImage *priv = cvLoadImage(name, 1);

if(!priv)
return NULL;

img = (pipi_image_t *)malloc(sizeof(pipi_image_t));
memset(img, 0, sizeof(pipi_image_t));
img = pipi_new(priv->width, priv->height);

img->w = priv->width;
img->h = priv->height;

img->p[PIPI_PIXELS_RGBA32].pixels = priv->imageData;
img->p[PIPI_PIXELS_RGBA32].w = priv->width;
img->p[PIPI_PIXELS_RGBA32].h = priv->height;
img->p[PIPI_PIXELS_RGBA32].pitch = priv->widthStep;
img->last_modified = PIPI_PIXELS_RGBA32;
img->p[PIPI_PIXELS_BGR24].pixels = priv->imageData;
img->p[PIPI_PIXELS_BGR24].w = priv->width;
img->p[PIPI_PIXELS_BGR24].h = priv->height;
img->p[PIPI_PIXELS_BGR24].pitch = priv->widthStep;
img->last_modified = PIPI_PIXELS_BGR24;

img->codec_priv = (void *)priv;
img->codec_format = PIPI_PIXELS_RGBA32;

return img;
}

pipi_image_t *pipi_new_opencv(int width, int height)
{
pipi_image_t *img;
IplImage *priv = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 4);

if(!priv)
return NULL;

img = (pipi_image_t *)malloc(sizeof(pipi_image_t));
memset(img, 0, sizeof(pipi_image_t));

img->w = priv->width;
img->h = priv->height;

img->p[PIPI_PIXELS_RGBA32].pixels = priv->imageData;
img->p[PIPI_PIXELS_RGBA32].w = priv->width;
img->p[PIPI_PIXELS_RGBA32].h = priv->height;
img->p[PIPI_PIXELS_RGBA32].pitch = priv->widthStep;
img->last_modified = PIPI_PIXELS_RGBA32;

img->codec_priv = (void *)priv;
img->codec_format = PIPI_PIXELS_RGBA32;
img->codec_format = PIPI_PIXELS_BGR24;

return img;
}
@@ -88,12 +58,32 @@ void pipi_free_opencv(pipi_image_t *img)
IplImage *iplimg;
iplimg = (IplImage *)img->codec_priv;
cvReleaseImage(&iplimg);

free(img);
}

void pipi_save_opencv(pipi_image_t *img, const char *name)
{
if(!img->codec_priv)
{
IplImage *priv = cvCreateImage(cvSize(img->w, img->h),
IPL_DEPTH_8U, 3);

/* FIXME: check pitch differences here */
if(img->last_modified == PIPI_PIXELS_BGR24)
{
memcpy(priv->imageData, img->p[PIPI_PIXELS_BGR24].pixels,
3 * img->w * img->h);
free(img->p[PIPI_PIXELS_BGR24].pixels);
}

img->p[PIPI_PIXELS_BGR24].pixels = priv->imageData;
img->p[PIPI_PIXELS_BGR24].w = priv->width;
img->p[PIPI_PIXELS_BGR24].h = priv->height;
img->p[PIPI_PIXELS_BGR24].pitch = priv->widthStep;

img->codec_priv = (void *)priv;
img->codec_format = PIPI_PIXELS_BGR24;
}

pipi_getpixels(img, img->codec_format);
cvSaveImage(name, img->codec_priv);
}


불러오는 중...
취소
저장