我的目标是能够键入一个单词命令,并从USB连接的Nexus One屏幕截图中获取屏幕截图.
到目前为止,我可以32bit xRGB888通过这样拉动它来获得我认为是原始图像的帧缓冲:
adb pull /dev/graphics/fb0 fb0
Run Code Online (Sandbox Code Playgroud)
从那里开始,我很难将它转换为png.我正在尝试像这样的ffmpeg:
ffmpeg -vframes 1 -vcodec rawvideo -f rawvideo -pix_fmt rgb8888 -s 480x800 -i fb0 -f image2 -vcodec png image.png
Run Code Online (Sandbox Code Playgroud)
这创造了一个可爱的紫色图像,其部分模糊地与屏幕相似,但它绝不是一个干净的屏幕截图.
我想我可以把它扔到那里然后问:我已经看到Delphi控件在图形效果方面完美无缺.含义:没有闪烁,分段更新(仅重绘标记为脏的控件部分)和平滑滚动.
我已经编写了很多多年来图形控制的,所以我知道双缓冲,DIBS,bitblts和所有的"共同"的东西(我一直使用的DIB如果可能的话绘制的一切,但有一个开销).还要了解InvalidateRect并检查需要更新的实际rect的TCanvas.ClipRect.尽管有这些典型的解决方案,但我发现创建与Developer Express或Razed Components相同质量的组件非常困难.如果图形是平滑的,你可以打赌滚动条(本机)闪烁,如果滚动条和框架是平滑的,你可以在滚动期间发誓背景闪烁.
是否有标准的代码设置来处理这个问题?一种确保平滑重绘整个控件的最佳实践 - 包括控件的非客户区域?
例如,这是一个"裸骨"控件,它为分段更新占用高度(仅重绘所需的内容).如果在表单上创建它,请尝试在其上移动一个窗口,然后观察它用颜色替换部件(请参阅绘制方法).
有没有人有类似的基类可以处理非客户区重绘而不闪烁?
type
TMyControl = Class(TCustomControl)
private
(* TWinControl: Erase background prior to client-area paint *)
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd);message WM_ERASEBKGND;
Protected
(* TCustomControl: Overrides client-area paint mechanism *)
Procedure Paint;Override;
(* TWinControl: Adjust Win32 parameters for CreateWindow *)
procedure CreateParams(var Params: TCreateParams);override;
public
Constructor Create(AOwner:TComponent);override;
End;
{ TMyControl }
Constructor TMyControl.Create(AOwner:TComponent);
Begin
inherited Create(Aowner);
ControlStyle:=ControlStyle - [csOpaque];
end;
procedure TMyControl.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
(* When a window has this style …Run Code Online (Sandbox Code Playgroud) 我在一个窗口画了一条线,我让用户拖动它.所以,我的线由两点定义:(x1,y1)和(x2,y2).但是现在我想在我的线末端绘制"帽子",也就是说,在我的每个终点处都有短垂线.大写字母的长度应为N像素.
因此,为了在终点(x1,y1)绘制我的"帽"线,我需要找到形成垂直线的两个点,并且其每个点距离点(x1,y1)的N/2个像素.
那么你如何计算一个点(x3,y3),因为它需要与已知线的终点(x1,y1)保持垂直距离N/2,即由(x1,y1)定义的线和(x2,y2)?
我目前正在用java编写绘图程序,旨在提供灵活而全面的功能.它起源于我最后一个项目,即我前一天晚上写的.因此,它有大量的bug,我一直在逐一处理(例如,我只能保存空的文件,我的矩形不能画正确但我的圈子会......).
这一次,我一直在尝试为我的程序添加撤消/重做功能.但是,我无法"撤消"我所做的事情.因此,我有一个想法,BufferedImage每次mouseReleased事件被解雇时都保存我的副本.但是,由于某些图像的分辨率为1920x1080,我认为这样效率不高:存储它们可能需要几十亿字节的内存.
为什么我不能简单地用背景颜色来绘制相同的东西以进行撤销的原因是因为我有许多不同的画笔,它们基于画笔Math.random(),并且因为有许多不同的图层(在单个图层中).
然后,我考虑克隆Graphics我用来绘制的对象BufferedImage.像这样:
ArrayList<Graphics> revisions = new ArrayList<Graphics>();
@Override
public void mouseReleased(MouseEvent event) {
Graphics g = image.createGraphics();
revisions.add(g);
}
Run Code Online (Sandbox Code Playgroud)
我之前没有这样做,所以我有几个问题:
BufferedImages?这个庞大的档案中有很多类型的图形图像,如.jpg,.gif,.png等.我不知道所有的类型.有没有一种方法可以让'find'能够列出所有图形图像而不管它们的点扩展名是什么?谢谢!
我很有兴趣了解可用于制作图形应用程序的不同抽象层.
我看到很多术语被抛出:在最高级别的抽象中,我听说过C#,.NET,pyglet和pygame之类的东西.再往下,我听说DirectX和OpenGL.然后是DirectDraw,SDL,Win32 API以及其他多平台库,如WxWidgets.
如何才能很好地了解其中一个层的结束位置以及下一个层的开始位置?什么是在Windows中创建窗口的"最低级别"方式?那么C++呢?(代码示例将是神圣的.)在X11中怎么样?OpenGL和DirectX的Windows实现是否构建在Win32 API之上?我在哪里可以开始了解这些事情?
关于SO的另一个问题是建议编程Windows.Linux怎么样?有没有相当于这样的书?
我知道这是非常低级的,并且有许多更友好的工具可用,但我想至少学习表面下发生的事情的基础知识.我想尽可能地开始甩掉窗户和矢量,从像pygame这样的东西开始对我来说太高级了; 我真的需要制作完整的概念电路,介绍如何在计算机上绘制内容.
我一定会欣赏有关书籍和资源的建议,但我认为如果这个问题的答案充满了许多不同的方法来通过不同的图形编程方法来获得"Hello world",那将是非常酷的.C?C++?使用OpenGL?使用DirectX?在Windows XP上?在Ubuntu上?也许我要求太多了.
给定一个封闭的Path对象结果是这样的:

虽然这是一个矩形我正在寻找适用于任何封闭路径的东西.
测试点P是否在由一组点X形成的凸包内的最简单方法是什么?
我想要一种在高维空间(例如,最多40维)中工作的算法,该算法不会明确地计算凸包本身.有任何想法吗?
我正试图在网页上放置一些图形,在计算机上放置原型,它在localhost上工作正常.但现在我将文件上传到服务器,我在绘制一些图形时遇到问题.在我的计算机中,它们被绘制,但在服务器上它们不是.
我收到了这个错误
Fatal error: Call to undefined function ImageCreate() in /home/t1g01/phplot.php on line 248
248行
$this->img = ImageCreate($this->image_width, $this->image_height);
我正在使用phplot,我也从phplot上传了文件.谁能帮我 ?
对不起任何英文错误,并提前感谢您.