اطلاعیه

Collapse
No announcement yet.

گرفتن اسکرین شات از tft lcd و ذخیره در مموری کارت(کاملا عملی)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    گرفتن اسکرین شات از tft lcd و ذخیره در مموری کارت(کاملا عملی)

    سلام
    یه تابعی درست کردم که یه عکس از صفحه نمایش tft میگیره و با فرمت BMP 16 بیت در مکان دلخواه شما ذخیره میکنه.
    خوب اگر از lcd 3.2 اینچی استفاده میکنید معمولا تابع tftlcd_read_pixel (خواندن پیکسل) اون نمایشی است و باید تابع
    زیر رو در هدر tft 3.2 اینچی بجای tftlcd_read_pixel کپی کنید تا درست شود:
    [code=c]unsigned short tftlcd_read_pixel(u16 x,u16 y)
    {
    wr_cmd (0x4F);
    wr_dat (x);
    wr_cmd (0x4E);
    wr_dat (y);
    tftlcd_set_cursor(x,y);
    LCD_CS(0)
    wr_cmd(0x22);
    return rd_dat();
    }[/code]

    خوب بعد از این کار ما نیاز به 70 بایت اول یک فایل BMP در اندازه lcd و 16 بیت نیاز داریم که میتونید کد زیر رو که برای
    lcd در اندازه های 320*240 ساختم استفاده کنید و اونو به پروژه تون قبل از main تعریف کنید:
    [code=c]const unsigned char bmp[]={
    0x42,0x4d,0x48,0x58,0x02,0x00,0x00,0x00,
    0x00,0x00,0x46,0x00,0x00,0x00,0x38,0x00,
    0x00,0x00,0xf0,0x00,0x00,0x00,0x40,0x01,
    0x00,0x00,0x01,0x00,0x10,0x00,0x03,0x00,
    0x00,0x00,0x02,0x58,0x02,0x00,0x12,0x0b,
    0x00,0x00,0x12,0x0b,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,
    0x00,0x00,0xe0,0x07,0x00,0x00,0x1f,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00
    };[/code]

    تا حالا تقریبا کار تمومه و حالا بعد از اضافه کردن کتابخانه rl-arm که برای راه اندازی mmc و sd کارت هست
    (آموزش کار با این کتابخونه در همین انجمن توضیح داده شده است و برای اطلاعات بیشتر به مجله نویز 8 مراجعه کنید)
    نوبت به اضافه کردن تابع زیر که کار اون ایجاد فایل BMP و ریختن اطلاعات در اونه میرسیم:
    [code=c]void tftlcd_screenshot(char *name)
    {
    short x,y,i;
    FILE *f;
    f = fopen(name,"w"
    for(i=0;i<70;i++){
    fputc(bmp[i],f);
    }
    for(y=319;y>=0;y--)
    for(x=0;x<240;x++)
    {
    fputc(tftlcd_read_pixel(x,y),f);
    fputc(tftlcd_read_pixel(x,y)>>8,f);
    }
    fputc(0,f);
    fputc(0,f);
    fclose(f);
    }[/code]
    برای استفاده از تابع بالا کافیه تا در main بعد از init کردن lcd و مموری کارت از کد زیر استفاده کنید:
    [code=c]tftlcd_screenshot("M:\\New folder\\pic1.bmp"[/code]

    این هم چند نمونه تصویر های گرفته شده از lcd 3.2 اینچی با lpc1768 :
    http://alidehghan288.persiangig.com/image/001.BMP
    http://alidehghan288.persiangig.com/image/002.BMP
    (توجه: تصاویر بالا را با دانلود منیجر دانلود کنید و با ویندوز مشاهده کنید چون بعضی از مرور گر ها قابلیت باز کردن تصاویر رو نداردند)
    معيار واقعي بودن تصميم، آن است که دست به عمل بزنيم.
لطفا صبر کنید...
X