delphi XE5开发的Android手机截屏功能  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi XE5开发的Android手机截屏功能


介绍


简单说明一下,运行后先点chmod然后点start,5秒存一张图,保存在/sdcard/mybmp下,当前仅支持800*480横屏的。需要别的分辨率的,请自行修改myscreensavetostream过程代码。

主要的截屏代码:
首先创建一个图片的流,然后将图片流做为参数传递到截屏函数中,最后保存成文件

procedure TForm1.Timer1Timer(Sender: TObject);
var

        memstrm:TMemoryStream;
        buf:array of Byte;
        intobuf:array of integer;
begin
        fileid:=fileid+1;
        memstrm:=TMemoryStream.Create();
        memstrm.Position:=0;
        myscreensavetostream(memstrm);
        memstrm.SaveToFile('/sdcard/mybmp/'+IntToStr(fileid)+'.bmp');
        memstrm.Free();

end;


下面是截屏的代码


procedure myscreensavetostream(Stream:TMemoryStream);
var
        offset:integer;
        btmapbuf:array of Byte;
        intobuf:array of integer;
        strm:TFileStream;
            FileHeader : TBitmapFileHeader;
            InfoHeader : TBitmapInfoHeader;
            HeaderLen,n : Integer;
        mybmp:TBitmap;
begin
        strm:=TFileStream.Create('/dev/graphics/fb0',fmOpenRead);
        SetLength(btmapbuf,1536000);
        setLength(intobuf,384000);
        strm.Position:=0;
        strm.Read(btmapbuf[0],1536000);

        offset:=0;
        while offset         begin
                intobuf[offset]:=btmapbuf[4*offset]+btmapbuf[4*offset+1]*256+btmapbuf[4*offset+2]*65536+btmapbuf[4*offset+3]*16777216;
                offset:=offset+1;
        end;

            //初始化文件头
            HeaderLen:=SizeOf(TBitmapFileHeader)+SizeOf(TBitmapInfoHeader);
            with FileHeader,InfoHeader do
            begin
                bfType:=$4D42;
                bfSize:=1536000+HeaderLen;  //self.FSize+HeaderLen
                bfReserved1:=0;
                bfReserved2:=0;
                bfOffBits:=HeaderLen;
                biSize:=SizeOf(TBitmapInfoHeader);
                biWidth:=800;              //Width
                biHeight:=480;             //Height
                biPlanes:=1;
                biBitCount:=32;
                biCompression:=0;         //BI_RGB
                biSizeImage:=1536000;     //self.FSize
                biXPelsPerMeter:=$EC4;
                biYPelsPerMeter:=$EC4;
                biClrUsed:=0;
                biClrImportant:=0;
            end;
            //写入数据
           n:=0;
            n:=n+Stream.Write(FileHeader,SizeOf(TBitmapFileHeader));
            n:=n+Stream.Write(InfoHeader,SizeOf(TBitmapInfoHeader));
            n:=n+Stream.Write(intobuf[0],1536000); //n:=n+Stream.Write((self.FBits)^,self.FSize);
            //result:=n=(1536000+HeaderLen);   //result:=n=(self.FSize+HeaderLen);

        mybmp:=TBitmap.Create;
        mybmp.LoadFromStream(Stream);
        mybmp.FlipVertical;
        Stream.Clear();
        Stream.Position:=0;
        mybmp.SaveToStream(Stream);

        SetLength(btmapbuf,0);
        setLength(intobuf,0);
        strm.Free();
end;


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.049258232116699 seconds