本篇文章给大家谈谈系统接口设计图片软件,以及软件接口图怎么画对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享系统接口设计图片软件的知识,其中也会对软件接口图怎么画进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
如何使用Win32下的GDI等接口实现绚丽,高效的界面
1.如何让界面绚丽?
怎么样
系统接口设计图片软件的算绚丽?有很漂亮的图片?有Alpha透明?有Animation?
每个人的审美观点都不同,所以如果你的界面很多人认为绚丽那就可以
系统接口设计图片软件了。设计界面主要是Designer的工作,包括UI逻辑的设计,色彩搭配设计等,我认为这也可以进一步分工
系统接口设计图片软件:熟悉用户习惯的Designer、美学Designer等。但是一般情况下这些让程序员给代劳
系统接口设计图片软件了。
下面介绍Windows提供给开发人员的相关接口,利用这些接口设计你认为绚丽的界面。
2.如何透明?如何半透明?如何颜色渐变?
以下是我使用Imaging COM组件封装的一个函数,可以使用其绘制PNG图片,当然也可以绘制其它图片。绘制带Alpha通道的PNG图片即实现了透明。
#include <imaging.h
#include <initguid.h
#include <imgguids.h
#pragma comment(lib, "Imaging.lib")
BOOL DrawPNG(HDC hDC, TCHAR *szPicString, RECT rcDraw)
{
BOOL br = FALSE;
IImagingFactory *pImgFactory = NULL;
IImage *pImage = NULL;
ImageInfo sImgInfo;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
// Create the imaging factory.
if (SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IImagingFactory,
(void **)pImgFactory)))
{
// Load the image from the JPG file.
if (SUCCEEDED(pImgFactory-CreateImageFromFile(
szPicString,
pImage)))
{
// Draw the image.
pImage-Draw(hDC, rcDraw, NULL);
pImage-Release();
pImage = NULL;
br = TRUE;
}
pImgFactory-Release();
}
CoUninitialize();
return br;
}
------------------------------------------------------------------------------------------------------
而封装的这个函数实现了将一个DC根据Alpha值半透明绘制到另一个DC上,使用GDI函数AlphaBlend实现。
BOOL AlphaBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest,
int nWidthDest, int nHeightDest,
HDC hdcSrc, int nXOriginSrc, int nYoriginSrc,
int nWidthSrc, int nHeightSrc,
BYTE alpha) {
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = alpha;
bf.AlphaFormat = 0;
return AlphaBlend(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
hdcSrc, nXOriginSrc, nYoriginSrc, nWidthSrc, nHeightSrc, bf);
}
如果你的设备支持AlphaBlend硬件加速那将是非常棒的事情,否则软件方式会有点影响性能。
------------------------------------------------------------------------------------------------------
颜色渐变也是直接有API可以支持
系统接口设计图片软件:
BOOL GradientFill(
HDC hdc,
PTRIVERTEX pVertex,
ULONG nVertex,
PVOID pMesh,
ULONG nCount,
ULONG ulMode
);
hdc
[in] Handle to the destination device context.
pVertex
[in] Pointer to an array of TRIVERTEX structures, each of which defines a triangle vertex.
nVertex
[in] The number of vertices in pVertex.
pMesh
[in] Array of GRADIENT_RECT structures in rectangle mode.
nCount
[in] The number of rectangles in pMesh.
ulMode
[in] Specifies gradient fill mode. The following table shows the possible values for ulMode.
This function fills rectangular regions with a background color that is interpolated from color values specified at the vertices.
不管你使用.Net CF平台调用这些API,还是Win32/MFC/ATL/WTL直接调用这些API,你都是可以实现这些效果的。更多内容请查询开发文档,毕竟那才是最好的参考资料。
3.如何实现动画?
动画的原理就是一帧一帧的画面按照时间轴向后移动,在骗过眼睛之后就成了动画,所以你得到动画最简单的方法就是按照一定间隔将不同图片一张一张绘制到屏幕上,虽然很简单,但是在编程中经常使用这种方法。有时简单的往往是最好的。
这里还有个技巧,比如将每张图片使用Photoshop中的运动滤镜模糊下,这样使用上面方法得到的动画会有种非常快速的感觉。也可以用类似的方法来用2D表现三维的事物,得到3D动画的效果。
还可以使用GIF动画的方式,比如在开机和关机时。以下封装的函数仅供参考,我没用心整理。
BOOL DisplayGIF(TCHAR *szPicString)
{
HANDLE hFile = CreateFile(strFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
DWORD dwFileSize = GetFileSize(hFile, NULL);
if ( (DWORD)-1 == dwFileSize )
{
CloseHandle(hFile);
return FALSE;
}
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
if (hGlobal == NULL)
{
CloseHandle(hFile);
return FALSE;
}
LPVOID pvData = GlobalLock(hGlobal);
if (pvData == NULL)
{
GlobalUnlock(hGlobal);
CloseHandle(hFile);
return FALSE;
}
DWORD dwBytesRead = 0;
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, dwBytesRead, NULL);
GlobalUnlock(hGlobal);
CloseHandle(hFile);
if (!bRead)
{
return FALSE;
}
IStream* pStream = NULL;
if ( FAILED(CreateStreamOnHGlobal(hGlobal, TRUE, pStream)) )
{
return FALSE;
}
IImage *pImage = NULL;
RECT rc;
IImagingFactory *pImgFactory = NULL;
CoInitializeEx(NULL, COINIT_MULTITHREADED);
if ( !SUCCEEDED(CoCreateInstance(CLSID_ImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void **)pImgFactory)) )
{
return FALSE;
}
IImageDecoder* pDecoder = NULL;
UINT nCount = 0;
if ( !SUCCEEDED(pImgFactory-CreateImageDecoder(pStream, DecoderInitFlagNone, pDecoder)) )
{
return FALSE;
}
pDecoder-GetFrameDimensionsCount(nCount);
GUID *pDimensionIDs = (GUID*)new GUID[nCount];
pDecoder-GetFrameDimensionsList(pDimensionIDs,nCount);
TCHAR strGuid[39];
StringFromGUID2(pDimensionIDs[0], strGuid, 39);
UINT frameCount = 0;
pDecoder-GetFrameCount(pDimensionIDs[0],frameCount);
UINT iSize = 0;
pDecoder-GetPropertyItemSize(PropertyTagFrameDelay,iSize);
BYTE* pBuff = new BYTE[iSize];
PropertyItem* pItem = (PropertyItem*)pBuff;
pDecoder-GetPropertyItem(PropertyTagFrameDelay,iSize,pItem);
int fCount = 0;
ImageInfo Info;
pImgFactory-CreateImageFromStream(pStream,pImage);
pImage-GetImageInfo(Info);
rc.left = rc.top = 0;
rc.right = Info.Width;
rc.bottom = Info.Height;
HDC tempDC;
HBITMAP hbmNew = NULL;
void * pv;
BITMAPINFO bmi = { 0 };
HBITMAP hbmOld = NULL;
tempDC = CreateCompatibleDC(NULL);
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = Info.Width;
bmi.bmiHeader.biHeight = Info.Height;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = (SHORT) max(16, GetDeviceCaps(tempDC, BITSPIXEL));
bmi.bmiHeader.biCompression = BI_RGB;
hbmNew = CreateDIBSection(tempDC, bmi, DIB_RGB_COLORS, pv, NULL, 0);
hbmOld = (HBITMAP)SelectObject(tempDC, hbmNew);
pImage-Draw(tempDC, rc, NULL);
pDecoder-SelectActiveFrame(pDimensionIDs[0], ++fCount);
BitBlt(g_hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, tempDC, 0, 0, SRCCOPY);
delete []pBuff;
delete []pDimensionIDs;
pDecoder-Release();
pImage-Release();
pImgFactory-Release();
CoUninitialize();
return TRUE;
}
4.如何有较高的运行效率?
后面的内容会介绍到使用GDI这些“较高层次”的接口是很难有较高的运行效率。
但是可以使用一些技巧,比如“空间换取时间”。相信"Lazy Computation”你有听过,延迟处理这项任务直到真正需要的时候(在编程中我们也会经常用到,需要有这个意识。)这里使用的技巧有点恰恰相反的味道,把用户将来很可能用到的地方先处理好,然后储存起来,而并不是等到用户真正需要的时候才去处理。
比如使用Imaging COM组件绘制PNG图片时,每次都需要加载组件的库文件,然后卸载,界面可能要反复刷新,然后反复绘制PNG图片。这时可以考虑在程序启动的时候使用非界面主线程将绘制好的PNG图片保存起来(比如以Device Context的形式),界面刷新的时候仅仅是BitBlt到目标设备。BitBlt的效率是比较高的,如果仍然不能满足你的效率要求,可以考虑下面介绍的DirectDraw等技术。
上面的方法对于具有丰富开发经验的应该比较清楚,但是新手往往会忽略。在开发界面时我们要保证一个基本原则:想尽一切办法在现有的条件下提高界面响应用户的速度,界面要以用户为中心。所以开发时需要保持这个意识。
5.如何提高程序启动速度?
第4部分说过,为了提高运行效率,可以将常用的界面在程序启动时一起缓存到内存中,那么程序的启动时间会大大增加,如何解决这个问题?我的建议是UI主线程仅仅加载少量的用户启动后直接就能看到的界面,而另起一个子线程(叫A)用于加载其它界面,其它界面加载完之后这个子线程退出,当用户点击其它界面时,主线程如果发现子线程A并没有退出,说明其它界面还没有加载完,让用户等待。
这么设计的好处是,将最耗时的任务分摊出去,即能保证了用户快速看到界面,又能在之后的运行中有较高的效率。
6.如何在绚丽和效率之间平衡?
最好的方法是得到界面运行时具体的时间消耗数据,如果必要可以精确到每个函数。得到一份系统正常情况下的数据,得到几份环境恶劣情况下的数据(比如系统非常繁忙、设备电量很少、要处理的数据非常多等)。定量的去分析解决这些问题。如果在恶劣的环境下你的绚丽界面表现的仍然不错,恭喜你,你太棒了!
Windows CE/Windows Mobile也提供了些基本的Performance API(像DirectDraw等技术还有自己的Performance接口和工具):
BOOL QueryPerformanceCounter(
LARGE_INTEGER* lpPerformanceCount
);
lpPerformanceCount
[in] Pointer to a variable that the function sets, in counts, to the current performance-counter value. If the installed hardware does not support a high-resolution performance counter, this parameter can be set to zero.
This function retrieves the current value of the high-resolution performance counter if one is provided by the OEM.
BOOL QueryPerformanceFrequency(
LARGE_INTEGER* lpFrequency
);
lpFrequency
[out] Pointer to a variable that the function sets, in counts per second, to the current performance-counter frequency. If the installed hardware does not support a high-resolution performance counter, the value passed back through this pointer can be zero.
This function retrieves the frequency of the high-resolution performance counter if one is provided by the OEM.
上面两个API需要OEM在OAL层提供实现,精度可以低于1ms,否则可以使用下面的API。
DWORD GetTickCount(void);
For Release configurations, this function returns the number of milliseconds since the device booted, excluding any time that the system was suspended. GetTickCount starts at zero on boot and then counts up from there.
For debug configurations, 180 seconds is subtracted from the the number of milliseconds since the device booted. This enables code that uses GetTickCount to be easily tested for correct overflow handling.
另外优化PNG、Bitmap、GIF等图片,让图片清晰度和大小刚好满足要求。
7.控件为什么如此降低运行效率?怎样减少控件的使用?
手机软件不同于桌面系统软件,一方面手机的处理速度更低、电池容量更小,另一方面用户会使用手机处理更紧急的事情。所以这也是我认为 不应该完全把桌面系统软件开发经验借鉴到手机软件开发上的原因。一个240x320分辨率大小的手机界面,你给放上5、6个控件,甚至更多,这个界面注定不会太高效率,这样的界面也不适合作为用户最常用的界面,比如今日界面。另一方面,Windows的标准、通用控件不会有太绚丽的外观,即使自定义的。但是这些控件能够带来很明显的开发速度。所以我们要协调好。不能为了窗口而窗口,更不能一切皆窗口。
那么你会问如何协调。我的建议是能不用控件的地方就不要用,大多地方可以直接使用图片,比如实现多状态按钮你可以这样做:
WM_LBUTTONDOWN消息处理里面先判断Point是否在按钮的Rect中,如果是将按下状态的图片DC BitBlt到屏幕对应位置,WM_LBUTTONUP消息处理里面再BitBlt回来。
8.基于Win32的界面运行效率比基于.Net CF高,但是开发效率低,怎么办?
Win32编程已经很古老、很“落后”了。但是在处理速度还不及奔三的Windows嵌入式设备上有时你不得不选择。把界面常用的功能代码封装成库(类库也可以),积累这样的资源可以提高团队的开发效率。C++泛型编程就是以牺牲编译时效率换取代码重用,但是不影响运行时效率,值得去深入学习下,而且有现成的库可用,比如STL。
还有其它的技术可供选择:DirectDraw(后面介绍的)、Direct3DM、OpenGL ES等。但是开发难度较高。
9.如何使用GDI+(Native/Managed)?
GDI+是GDI的下一个版本,它进行了很好的改进,并且易用性更好。GDI的一个好处就是你不必知道任何关于数据怎样在设备上渲染的细节,GDI+更好的实现了这个优点,也就是说,GDI是一个中低层API,你还可能要知道设备,而GDI+是一个高层的API,你不必知道设备。以下引用自MSDN文档:
"2-D vector graphics involves drawing primitives (such as lines, curves, and figures) that are specified by sets of points on a coordinate system.
For example, the Rect class stores the location and size of a rectangle; the Pen class stores information about line color, line width, and line style; and the Graphics class has methods for drawing lines, rectangles, paths, and other figures. There are also several Brush classes that store information about how closed figures and paths are to be filled with colors or patterns.
Certain kinds of pictures are difficult or impossible to display with the techniques of vector graphics. Imaging part will resolve this problem. An example of such a class is CachedBitmap, which is used to store a bitmap in memory for fast access and display.
Typography is concerned with the display of text in a variety of fonts, sizes, and styles. One of the new features in GDI+ is subpixel antialiasing. “
Windows CE/Windows Mobile下的GDI+仅仅是Windows桌面系统的一个很小的子集。
如何软件系统设计
一、善用UML工具
用例图
用于需求分析阶段系统接口设计图片软件,从用户角度描述系统功能。
用例图
静态图:类图、对象图、包图
静态图
交互图-时序图(注重时间)
常用组合片段:选项(Opt)、循环(Loop)、并行(Par)、抉择(Alt)、中断(Break)
时序图
交互图-协作图(注重对象)
协作图
行为图-状态图(注重状态)
状态图
行为图-活动图(注重活动)
活动图
实现图-组件图
组件图
实现图-部署图
部署图
二、遵从设计原则
设计模式基础
单一职责:一个类只负责一个职能;
里氏转换:在子类中不应重写、重载父类的方法,子类要能替代父类;
接口隔离:不依赖不需要的接口,拆分大接口;
迪米特法则:一个对象应该对其他对象保持最少的系统接口设计图片软件了解(低耦合);
开放封闭:对扩展开放,对修改关闭;
依赖倒置:抽象不应该依赖细节,细节应该依赖抽象,即针对接口编程,所有依赖关系都终止于抽象类或接口,不要对实现编程。
设计模式
创建型
工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)、单例(Singleton)、原型(Prototype)。
结构型
组合(Composite)、代理(Proxy)、外观(Facade)、适配器(Adapter)、装饰(Decorator)、桥接(Bridge)、享元(Flyweight)。
行为型
策略(Strategy)、模板方法(Temple
Method)、观察者(Observer)、状态(State)、备忘录(Memento)、迭代器(Iterator)、命令(Command)、责任链(Chain
Of Responsibility)、中介者(Mediator)、访问者(Visitor)、解释器(Interpreter)。
分布式设计原则
高可用
降级、限流(漏桶-平滑、令牌桶-可突发、环形队列+滑动窗口)、切流、熔断、回流、可回流、超时、隔离(线程、读写、资源、热点、爬虫)、负载均衡。
高并发
无状态、拆分、服务化、队列、数据异构(异构-原子化-聚合-缓存)、缓存、并发化(Future、Callback、Completable Future)、池化。
业务设计
防重、幂等、规则引擎、状态机、审计、审批。
分布式理论
CAP:一致性、可用性、分区容错性(三选二);
BASE:基本可用、软状态、最终一致性;
ACID:原子性、一致性、隔离性、持久性。
一致性原则
XA协议:准备 - 提交(具有阻塞、协调者单点、脑裂等缺点);
XA三段协议:询问 - 准备 - 提交;
TCC:try - confirm / try - cancel 锁定 - 确认/释放;
最终一致性:查询、补偿、定期校对、可靠消息、缓存一致性。
超时处理
原则:谁超时谁处理,即接口调用超时,查询+补偿;接口调用成功后,接口内部服务超时须自己补偿。
两状态同步接口(OK/ERR):接口调用超时,调用方查询+补偿;接口内部服务超时,内部快速失败+冲正;
三状态同步接口(OK/ING/ERR):接口调用超时,调用方查询+补偿;接口内部服务超时,返回处理中,内部查询+补偿到成功,调用方轮询;
异步接口:接口调用超时,调用方查询+补偿;接口内部服务超时,内部查询+补偿到成功,回调通知;接口回调通知超时,指数补偿回调;
消息队列:生产者发送超时,持久化可靠发送+幂等消费;消费者消费超时,消息处理完偏移量增加。
缓存
缓存分片:客户端分片(redic)、代理分片、集群分片(一致性Hash);
缓存穿透:缓存空值、有效Key判断;
缓存并发:分布式锁、本地锁、软过期(业务过期);
缓存雪崩:错峰失效。
三、画好架构图
4+1视图
场景视图:参与者与功能用例关系,用例图表示;
逻辑视图:功能拆解后的组件边界及关系,组件图和类图表示;
物理视图:软件与硬件映射关系,部署图表示;
处理流程图:各组件流程与数据交互,时序图和流程图表示;
开发视图:模块划分及包组成,包图表示。
C4视图
语境图:梳理待建设系统用户和高层次依赖,在中间画出自己的系统,周围是用户与其它交互系统。
C4语境图
容器图:展开语境图待建设系统,用框图表示,可包含名称、技术选择、职责、框图间交互,明确外部系统边界。
C4容器图
组件图:展开某个容器,描述其内部模块组件组成、关系。
C4组件图
类图:同UML静态图,此处不再展开。
AutoCAD、CAXA与中望CAD哪个软件更好用好学?它们都各有哪些特点?
"中望CAD功能实用、操作便捷,为了方便直观了解,与大家分享一些用户关注的产品功能表现:
一、开图性能
以常用的1MB、10MB、100MB三类图纸为例,中望CAD的开图速度分别为1.35秒,3.13秒,7.15秒,相较于市面上主流CAD软件,开图效率最优。
二、兼容格式
中望CAD采用国际标准的工业图形文件格式DWG、DXF作为内部存储文件格式,全面兼容目前最新的图纸格式,可直接读取和保存常见图形信息,准确完整。
三、二维制图与编辑
中望CAD能提供常用的二维图形绘制功能,如点、线、曲线、多段线、多线等类型;在对象编辑操作上,常用编辑命令,包括如复制、缩放、倒角、倒圆角、平移等均可满足。可保证顺畅的绘图设计需求。
四、可支持插件
中望CAD与海内外200+专业应用开发商建立合作,可支持插件覆盖能源电力、公路交通、工程算量、协同设计与管理等领域,主流插件如天正、探索者、南方数据、燕秀工具箱等均可支持。
戳这里,了解更多中望CAD产品功能
中望CAD支持30天免费试用,用户可以亲身免费下载体验中望CAD"
auto cad 谁能给我讲一下是什么
AutoCAD是由美国Autodesk公司开发的大型计算机辅助绘图软件,主要用来绘制工种图样。它为工种设计人员提供了强有力的两维和三维设计与绘图功能。当前Auto CAD已经广泛应用于机械、电子、服装、建筑等设计领域。
作为以CAD技术为内核的辅助设计软件,Auto CAD具备了CAD技术能够实现的基本功能。作为一个通用的工种设计平台,Auto CAD还拥有强大的人机交互能力和简便的操作方法,十分方便广大普通用户,下面介绍一下Auto CAD的主要功能。[1] 具有强大的图形绘制功能:Auto CAD提供了创建直线、圆、圆弧、曲线、文本和尺寸标注等多种图形对象的功能。 请添加图片说明
★★精确定位定形功能:Auto CAD提供了坐标输入、对象捕捉、栅格捕捉、追踪等功能,利用这些功能可以精确地为图形对象定位和定形。
★★具有方便的图形编辑功能:Auto CAD提供了复制、旋转、阵列、修剪、缩放、偏移等方便使用的编辑工具,大大提高了绘图效率。
★★图形输出功能:图形输出包括屏幕显示和打印出图,Auto CAD提供了方便的缩放和平移等屏幕显示工具,模型空间、图纸空间、布局、发布和打印等功能极大地丰富了出图选择。
★★三维造型功能:Auto CAD具备三维模型、布尔运算、三维编辑等功能。
★★辅助设计功能:可以查询绘制好的图形的长度、面积、体积和力学性能等;提供多种软件的接口,可方便地将设计数据和图形在多个软件中共享,进一步发挥各软件的特点和优势。
★★允许用户进行二次开发:Auto CAD自带的AutoLISP语言让用户自行定义新命令和开发新功能。通过DXF、IGES等图形数据接口,可以实现Auto CAD和其他系统的集成。此外,Auto CAD支持Object ARX、ActiveX、VBA等技术,提供了其他高级编辑语言的接口,具有很强的开发性。
希望我的回答对你有帮助,祝你好运!
关于系统接口设计图片软件和软件接口图怎么画的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
系统接口设计图片软件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于软件接口图怎么画、系统接口设计图片软件的信息别忘了在本站进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~