درخاست لایبری jpg برای میکرو

antipa

همکار جدید
سلام دوستان
کسی لایبری jpg دارد که به صورت خیلی ساده بشه تو پروژه ها ازش استفاده کرد
مثلا یک عکس با پسوند jpg در به صورت هگز در حافظه ی میکرو ذخیره کنیم
و بعد با این لایبری مورد نظر اون عکس را روی نمایشگر نشان دهیم
چون سرعت لود و همچنین حجم jpg خیلی کمتر از bmp هست بشدت نیاز به این لایبری داریم
توی اینترنت لایبری هست ولی تا حالا کسی نیومده خوب توضیح بده چطوری اینا کار میکنن
ممنون میشم یک توضیح کلی بدید
 

Alma

مدیر
پرسنل مدیریت
سلام یکی از بهترین و ساده ترین کتابخونه های JPG کتابخونه TJpgDec اقای چان هست که من خودم هم ازش خیلی استفاده میکنم
خود کتابخونه رو زیر پست اپلود میکنم و تا چند روز بعد توضیحات لازم رو برای استفاده ازش توی پست های بعدی خواهم داد

البته برای استفاده ازش بهتره از مموری یا ایسی های فلش استفاده بشه نه از حافظه خود میکرو درسته که JPG حچم کمتری نسبت یه BMP داره ولی در صورت استفاده از حافظه خود میکرو بهتره از bmp استفاده بشه چون دکمپرس کردن JPG هم نیاز به پردازش بالایی داره هم حجم فلش و رم بالایی رو میگیره

1624430118777.png

یه نمونه کد برای استفاده از این کتابخونه هم خود اقای چان دادن که همینجا هم میزارم ولی بعدا توضیحات بیشتری هم خواهم داد شما هم میتونید در صورتی که مشکلی یا سوالی داشتین مطرح کنید

نمونه کد :

کد:
/*------------------------------------------------*/
/* TJpgDec Quick Evaluation Program for PCs       */
/*------------------------------------------------*/

#include <stdio.h>
#include <string.h>
#include "tjpgd.h"


/* Session identifier for input/output functions (name, members and usage are as user defined) */
typedef struct {
    FILE *fp;               /* Input stream */
    uint8_t *fbuf;          /* Output frame buffer */
    unsigned int wfbuf;     /* Width of the frame buffer [pix] */
} IODEV;


/*------------------------------*/
/* User defined input funciton  */
/*------------------------------*/

size_t in_func (    /* Returns number of bytes read (zero on error) */
    JDEC* jd,       /* Decompression object */
    uint8_t* buff,  /* Pointer to the read buffer (null to remove data) */
    size_t nbyte    /* Number of bytes to read/remove */
)
{
    IODEV *dev = (IODEV*)jd->device;   /* Session identifier (5th argument of jd_prepare function) */


    if (buff) { /* Raad data from imput stream */
        return fread(buff, 1, nbyte, dev->fp);
    } else {    /* Remove data from input stream */
        return fseek(dev->fp, nbyte, SEEK_CUR) ? 0 : nbyte;
    }
}


/*------------------------------*/
/* User defined output funciton */
/*------------------------------*/

int out_func (      /* 1:Continue, 0:Abort */
    JDEC* jd,       /* Decompression object */
    void* bitmap,   /* Bitmap data to be output */
    JRECT* rect     /* Rectangular region of output image */
)
{
    IODEV *dev = (IODEV*)jd->device;   /* Session identifier (5th argument of jd_prepare function) */
    uint8_t *src, *dst;
    uint16_t y, bws, bwd;


    /* Put progress indicator */
    if (rect->left == 0) {
        printf("\r%lu%%", (rect->top << jd->scale) * 100UL / jd->height);
    }

    /* Copy the output image rectanglar to the frame buffer (assuming RGB888 output) */
    src = (uint8_t*)bitmap;
    dst = dev->fbuf + 3 * (rect->top * dev->wfbuf + rect->left);  /* Left-top of destination rectangular */
    bws = 3 * (rect->right - rect->left + 1);     /* Width of output rectangular [byte] */
    bwd = 3 * dev->wfbuf;                         /* Width of frame buffer [byte] */
    for (y = rect->top; y <= rect->bottom; y++) {
        memcpy(dst, src, bws);   /* Copy a line */
        src += bws; dst += bwd;  /* Next line */
    }

    return 1;    /* Continue to decompress */
}


/*------------------------------*/
/* Program Main                 */
/*------------------------------*/

int main (int argc, char* argv[])
{
    JRESULT res;      /* Result code of TJpgDec API */
    JDEC jdec;        /* Decompression object */
    void *work;       /* Pointer to the work area */
    size_t sz_work = 3100; /* Size of work area */
    IODEV devid;      /* Session identifier */


    /* Initialize input stream */
    if (argc < 2) return -1;
    devid.fp = fopen(argv[1], "rb");
    if (!devid.fp) return -1;

    /* Prepare to decompress */
    work = (void*)malloc(sz_work);
    res = jd_prepare(&jdec, in_func, work, sz_work, &devid);
    if (res == JDR_OK) {
        /* It is ready to dcompress and image info is available here */
        printf("Image size is %u x %u.\n%u bytes of work ares is used.\n", jdec.width, jdec.height, sz_work - jdec.sz_pool);

        /* Initialize output device */
        devid.fbuf = (uint8_t*)malloc(3 * jdec.width * jdec.height); /* Create frame buffer for output image (assuming RGB888 cfg) */
        devid.wfbuf = jdec.width;

        res = jd_decomp(&jdec, out_func, 0);   /* Start to decompress with 1/1 scaling */
        if (res == JDR_OK) {
            /* Decompression succeeded. You have the decompressed image in the frame buffer here. */
            printf("\rDecompression succeeded.\n");

        } else {
            printf("jd_decomp() failed (rc=%d)\n", res);
        }

        free(devid.fbuf);    /* Discard frame buffer */

    } else {
        printf("jd_prepare() failed (rc=%d)\n", res);
    }

    free(work);             /* Discard work area */

    fclose(devid.fp);       /* Close the JPEG file */

    return res;
}
فایل tjsample.zip که ضمیمه شده نمونه برنامه برای چند نوع میکرو مختلف از جمله AVR هست
 

پیوست‌ها

  • 1624429936117.png
    1624429936117.png
    14.9 کیلوبایت · بازدیدها: 2
  • tjpgd2a.rar
    11.2 کیلوبایت · بازدیدها: 1
  • tjsample.zip
    953.5 کیلوبایت · بازدیدها: 3

iran

همکار جدید
سلام
فوتوشاپ ونرم افزار mathlab قابلیت تبدیل عکس به متن و کد بایناری 01 دارند که میشه فشرده وهرجایدلخواه ذخیره کرد.
گفتم شاید به کارت بیاد.البته فوتوشاپ یه مقدار این کاروسختتر انجام میده.
به هر حال تصویر که تبدیل به متن بشه کار باهاش آسون میشه ومیشه با یک کتابخانه فشرده اش هم بکنی
 
بالا پایین