⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camera.c

📁 6410BSP3
💻 C
字号:
#include <windows.h>
#include <stdio.h>



#define R_RGB565(x)        (unsigned char) (((x) >> 8) & 0xF8)
#define G_RGB565(x)        (unsigned char) (((x) >> 3) & 0xFC)
#define B_RGB565(x)        (unsigned char) ((x) << 3)

// Generating RGB565 pixel by composing r, g, b components
#define RGB565(r, g, b)        (unsigned short) ((((r) & 0xF8) << 8) | (((g) & 0xFC) << 3) | ((b) >> 3))


extern const unsigned short icon[];


#include "exp_frame.h"
#include "imgproc.h"


static int PPM_Header(FILE *fp, int *wd, int *hi)
{
    char line[256];

    if (fp == NULL)
        return -1;

    // P6
    if (fgets(line, sizeof(line), fp) == NULL)
        return -1;
    if (memcmp(line, "P6", 2) != 0)
        return 1;

    // Skipping comment line
    do {
        if (fgets(line, sizeof(line), fp) == NULL)
            return -1;
    } while (line[0] == '#');

    // At this point, the line buffer contains width and height
    sscanf(line, "%d %d", wd, hi);

    // Max value for each R, G, B component
    if (fgets(line, sizeof(line), fp) == NULL)
        return -1;

    return 0;
}

int Write_PPM(int wd, int hi, unsigned char *p_img, char *filename)
{
    int   i, size;
    FILE *fp_write;
    unsigned short rgb565;
    unsigned char  rgb[3];

    fp_write = fopen(filename, "wb");

    fprintf(fp_write, "P6\n");
    fprintf(fp_write, "# Samsung Electronics\n");
    fprintf(fp_write, "%d %d\n255\n", wd, hi);

//    fwrite(p_img, 3, wd * hi, fp_write);

    size = wd * hi;
    for (i=0; i<size; i++) {
        rgb[0] = *p_img; p_img++;
        rgb[1] = *p_img; p_img++;
//        rgb565 = (rgb[0]<<8) | rgb[1];
        rgb565 = (rgb[1]<<8) | rgb[0];

        rgb[0] = R_RGB565(rgb565);
        rgb[1] = G_RGB565(rgb565);
        rgb[2] = B_RGB565(rgb565);

        fwrite(rgb, 1, 3, fp_write);
    }

    fclose(fp_write);

    return 0;
}

int Write_PGM(int wd, int hi, unsigned char *p_img, char *filename)
{
    int   i, size;
    FILE *fp_write;
    unsigned short rgb565;
    unsigned char  rgb[3];

    fp_write = fopen(filename, "wb");

    fprintf(fp_write, "P5\n");
    fprintf(fp_write, "# Samsung Electronics\n");
    fprintf(fp_write, "%d %d\n255\n", wd, hi);

    fwrite(p_img, 1, wd * hi, fp_write);

    fclose(fp_write);

    return 0;
}

int RGB888_To_RGB565(int wd, int hi, unsigned char *p_rgb888, unsigned char *p_rgb565)
{
    int      i, j;
    int      idx;
    unsigned short rgb565, *p_rgb565_short;
    unsigned char  rgb[3];

    idx = 0;
    p_rgb565_short = p_rgb565;

    for (i=0; i<hi*wd; i++) {
        rgb[0] = p_rgb888[idx++];
        rgb[1] = p_rgb888[idx++];
        rgb[2] = p_rgb888[idx++];
        rgb565 = RGB565(rgb[0], rgb[1], rgb[2]);
        p_rgb565_short[i] = rgb565;
    }


    return 0;
}

int RGB565_To_RGB888(int wd, int hi, unsigned char *p_rgb565, unsigned char *p_rgb888)
{
    int      i;
    int      idx;
    unsigned short rgb565, *p_rgb565_short;

    idx = 0;
    p_rgb565_short = p_rgb565;

    for (i=0; i<hi*wd; i++) {
//        rgb565 = (*(p_rgb565+1) << 8) | *(p_rgb565);
        rgb565 = (*(p_rgb565) << 8) | *(p_rgb565 + 1);

        p_rgb888[idx++] = R_RGB565(rgb565);
        p_rgb888[idx++] = G_RGB565(rgb565);
        p_rgb888[idx++] = B_RGB565(rgb565);
        p_rgb565 += 2;
    }

    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -