Hozzászólások
Igen.
A /dev/fb0 fájlon keresztül a framebuffer adatait (pixelek - RGBA) közvetlenül, akár az ablakkezelőt megkerülve, el lehet érni...
Az mmap() hivassal be is van kotve memoriaba;
Odaig mondjuk van elkepzelesem hogy,hogyan olvasom ki a pixeleket,csak azt nem tudom hogy hogy lehet abbol majd kepet letrehozni?
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
OP:UHU 1.2
A kovetkezo temaban szeretnem a segitsegeteket kerni:
[code:1:93e82326dd]
/*.........................*/
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
printf("Error reading variable information.\n");
exit(1);
}
screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,
fbfd, 0);
/*.........................*/
[/code:1:93e82326dd]
Hogya lehet a pixeleket kiolvasni? es kep formaban -bmp?- elmenteni?
Minden segitseget koszonok!
- A hozzászóláshoz be kell jelentkezni
fb konzolról akarsz képet lopni?
- A hozzászóláshoz be kell jelentkezni
Ennyire jutottam :
/* /dev/fb* screen shut*/
#include <linux/fb.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include "bitmap.h"
int main(int argc, char **argv)
{
int framebuffer_device;
int line_size, buffer_size;
int *screen_memory;
struct fb_var_screeninfo vinfo;
if ((framebuffer_device = open("/dev/fb0", O_RDWR)) == -1) {
perror("open /dev/fb* ");
exit(1);
}
if (ioctl(framebuffer_device, FBIOGET_VSCREENINFO, &vinfo) == -1) {
perror("ioctl FBIOGET_VSCREENINFO ");
exit(1);
}
buffer_size = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
vinfo.xoffset = 0;
vinfo.yoffset = 0;
/*
* if ( ioctl(framebuffer_device, FBIOPAN_DISPLAY, &vinfo) == -1) {
* perror("ioctl FBIOPAN_DISPLAY "); exit(1); }
*/
screen_memory = (char *)(mmap(0, buffer_size
+ 512, PROT_READ | PROT_WRITE, MAP_SHARED,
framebuffer_device, 0)) + 512;
printf(" buffer size = %d\n line size = %d\n ", buffer_size,
line_size);
/*bmp fejlec
*/
TBMPHead bmp_head;
bmp_head.FileHeader.bfSize = sizeof(TBMPFileHeader);
bmp_head.FileHeader.bfType = 0x4d42; /* BM */
bmp_head.InfoHeader.biSize = sizeof(TBMPInfoHeader);
bmp_head.InfoHeader.biWidth = vinfo.xres;
bmp_head.InfoHeader.biHeight = vinfo.yres;
bmp_head.InfoHeader.biPlanes = 1;
bmp_head.InfoHeader.biBitCount = 16;
bmp_head.InfoHeader.biCompression = 0x00000003; /* BI_BITFIELDS */
bmp_head.InfoHeader.biSizeImage = 0;
bmp_head.InfoHeader.biXPelsPerMeter = 0; //vinfo.xres;
bmp_head.InfoHeader.biYPelsPerMeter = 0; //vinfo.yres;
bmp_head.InfoHeader.biClrUsed = 0;
bmp_head.InfoHeader.biClrImportant = 0;
int seek_ret, fd = open("./kep.bmp", (O_RDWR | O_CREAT));
write(fd, &bmp_head, sizeof(TBMPHead));
/*& ~S_IROTH */
printf("sizeof(TBMPInfoHeader) = %d byte\n", sizeof(TBMPInfoHeader));
printf(" sizeof(TBMPFileHeader) = %d byte\n", sizeof(TBMPFileHeader));
if ((off_t) (seek_ret = lseek(fd, sizeof(TBMPHead), SEEK_SET)) != -1) {
printf(" screen_memory = %d \n", screen_memory);
write(fd, screen_memory, buffer_size);
close(fd);
} else {
perror("lseek:");
exit(1);
}
munmap(screen_memory, buffer_size);
return 0;
}
Az eredmeny -ha valamelyik vt 'fenykepezem'- egy majdnem tokeletes kep fejleg:-)Mar csak meg kellene forditani a fileba irast...
Megj: NEM jelenik meg a bongeszoben a #inculde utani resz -az elso sorokban-,lehet hogy a "< >" jelek bekavarnak...?
- A hozzászóláshoz be kell jelentkezni