位图

Delphi使用资源文件全攻略

夙愿已清 提交于 2020-02-01 11:00:14
本文为原创,如需转载,请注明作者和出处,谢谢! 在通常情况下使用delphi设计程序,都是将字符串、图像等资源直接使用delphi提供的vcl控件加到*.dfm中,这样做会合修改这些资源时带来 不便,如果资源被多次引用,这些资源在程序启动时都被加载到内存中,非常耗费系统资源。因此,这就需要一种新的引用资源的文件:资源文件。资源文件就是将 一些资源,如字符串、图像等信息进行编译,然后在程序中引用编译后的资源文件,最后和源程序一起编译生成可执行文件。由于在资源文件中的资源是在需要时加 载,因此,比较节省系统资源,而且,如果要做国际化版本的系统,只需要将资源文件一换,重新编译即可。下面就详细介绍delphi中资源文件的建立和使 用。 一、建立资源文件 资源文件的源文件是普通的文本文件,扩展名是*.rc。将资源文件的内容写入文件后,调用brcc32.exe将其编译后生成*.res文件。brcc32.exe在delphi的bin目录中。 二、字符串资源 字符串资源实际上是将一个字符串和一个数字索引对应,在装载字符串资源时,需要提供这个字符串资源所对应的数字索引。字符串资源文件以stringtable开头,使用一对begin和and将资源定义括起来。 字符串资源的格式是:数字索引,"资源字符串"。 string.rc文件内容 stringtable begin 1001, "新建" 1002,

Delphi工具之Image Editor

爷,独闯天下 提交于 2020-02-01 10:57:04
Delphi Image Editor是一个工具,可用它来创建并编辑位图(.bmp)、图标(.ico)和光标(.cur),还可以用它创建资源工程,将多个位图、图标和光标包含到单个资源文件(.RES)中,再将该资源文件加到Delphi工程中供需要时使用。如下图,是正在编辑中的Image Editor。 Note 所有的Windows图像都是位图,无论它们是真正的Windows位图文件(.bmp),还是图标或光标。在我们的讲解中,将所有图像都称为位图。Image Editor只能处理Windows位图文件,它不支持其他文件格式,如PCX,TIFF,JPEG和GIF。 可从开始菜单中选择Image Editor菜单项启动Image Editor,也可以从Delphi的主菜单的【Tools | Image Editor】菜单项打开(如下图)。Image Editor是一个单独的程序,不必在Delphi IDE中运行它。 Image Editor的各个部分介绍 上图中将所有的工具箱中的工具名称列出,请熟悉它们。 Marquee选区工具和Lasso套索工具的作用一样的,前者用于选定矩形区域,后者用于任意形状的选择。 当一个区域被选定后,用户可剪切或复制该区域内的图像。用Marquee和Lasso工具选定区域,将鼠标光标移动到该区域内(鼠标光标变成如下图的手型光标),拖动鼠标

Android Studio制作九宫格位图(Nine-patch)

谁都会走 提交于 2020-02-01 03:53:06
Nine-Path 图片是能够指定哪些区域可以被拉伸、哪些区域不可以的图片,常见的微信中的聊天气泡; 制作方法,首先把图片导入到工作目录后,在AS中右键点击图片---制作 9-patch 文件 然后会出现保存的路径,直接确认即可,会生成一个message_left.9.png的图片,在AS中双击进入编辑 鼠标拖住边线控制可以拉伸的范围,四周都设置完后,会是这个样子,直接关闭,然后将该图片名字改为message_left.png(即替换掉原来的图片), 再次运行,可以看效果: 下图是处理前的效果 再次打开编辑后的图片,可以看到图片四周已有黑线,那些即为可以拉伸的区域 需要注意: 1.编辑后的图片格式为 .9.png,注意编辑完后不要修改后缀名,否则系统是不会认的; 2.最外围的一圈像素必须要么是纯黑色,要么是透明,一点点的半透明的像素都不可以有,比如说99%的黑色或者是1%的投影都不可以有。(感谢 Ricky彪 ) 来源: https://www.cnblogs.com/5igis/p/5igis_12498.html

malloc 堆分配算法探析

别来无恙 提交于 2020-01-30 05:15:17
提到 C 语言不能不说内存管理,而内存管理则必须了解 malloc,今天深度学习了 malloc 的堆分配算法原理,笔记整理如下 什么是堆分配算法? 程序向操作系统申请一块适当大小的堆空间,然后由程序自己管理这块空间,而具体来讲,管理着堆空间分配的是运行库------也就是封装起来的 malloc 函数。运行库相当于向操作系统“批发”了一块较大的堆空间,然后“零售”给程序使用,当全部“售完”或程序有大量的内存需求时,再根据实际情况向操作系统“进货”。当运行库在向程序零售堆空间时,必须管理它批发来的堆空间,不能重复“出售”,导致地址冲突,于是运行库需要一个算法来管理堆空间,这个算法就是堆的分配算法。 常见的 malloc 分配算法三种: 空闲链表、位图、对象池 1. 空闲链表 空闲链表的方法实际就是把堆上各个空闲的块按照链表的方式连接起来,当用户需要一块空间时,遍历整个链表,直到找到合适的大小将他拆分;当用户释放空间则进行合并。 空闲链表的结构: 头 + 空闲块 头结构记录了上一个 [pre] 和下一个 [next] 空闲块的地址 如何利用这个结构分配空间? 首先在空闲链表中查找足够容纳请求大小的一个空闲块,然后将这个块分为两部分,一部分为程序请求的空间,另一部分为剩余下来的空闲空间。 释放空间的时候,只有一个指针,无法确定这个块的大小,如何释放 当用户请求 k 个字节空间的时候

基础知识

拥有回忆 提交于 2020-01-30 01:28:30
位图(点阵图) 可以精准地制作色彩和色调变化丰富的图,但是若图像(位图与分辨率有关)放大到一定程度后失真(边缘出现锯齿)。注:分辨率,屏幕的精密度,既显示器显示像素的个数。 矢量图(向量式图像) 以线条和色块为主。最大的优点,无论放大缩小或旋转都不会失真;最大的缺点,难以表现色彩层次丰富且逼真的图像效果。 图像的色彩模式 RGB模式 最常用的色彩模式红色通道(red),绿色通道(green),蓝色通道(blue),这三种通道可以组成1670万余种不同的颜色。在该模式下用户可以使用ps中所有的命令和滤镜,切该模式下图像文件占用内存更小。 CMYK模式 CMYK模式是一种印刷模式,由分色印刷的四种颜色组成,青色(cyan),洋红色(magenta),黄色(yellow)和黑色(blank)。在用ps处理图像时,一般不用CMYK模式,该模式不仅占用内存大,而且不支持很多滤镜。一般需要印刷时才将图像转换为CMYK模式。 灰度模式 灰度模式可以表现出丰富的色调,但是只能用于表现黑白图像。使用黑白和灰度扫描仪产生的图像常用灰度模式显示。 位图模式 该模式下的图像又称黑白图像,它占用内存小,但是只能制作出黑白颜色对比强烈的图像。 索引模式 索引模式是网上和动画中常用的图像模式。 常用的图像格式 PSD格式 ps的默认格式,也是唯一支持所有图像模式的文件格式。它可以保存图像中的图层,通道

VC重绘如何防止屏幕闪烁

淺唱寂寞╮ 提交于 2020-01-29 03:04:09
用MFC如何高效地绘图 显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。 而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。 MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单, 只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。 我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈 我的一些观点。 1、显示的图形为什么会闪烁? 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏 幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时, 总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容 反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来 在闪。如果将背景刷设置成NULL,这样无论怎样重绘图形都不会闪了。 当然,这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来 绘制的图形进行清除,而又叠加上了新的图形。 有的人会说,闪烁是因为绘图的速度太慢或者显示的图形太复杂造成的, 其实这样说并不对,绘图的显示速度对闪烁的影响不是根本性的。 例如在OnDraw(CDC *pDC)中这样写: pDC->MoveTo(0,0); pDC->LineTo(100,100); 这个绘图过程应该是非常简单、非常快了吧

OpenGL 位图和图像概念

一笑奈何 提交于 2020-01-27 04:20:31
  开始前,先看一下这几个概念:   帧缓冲区:计算机显存储器的一部分,存放屏幕图像的内容。FrameBuffer是内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它堪称显示内存的一个映像,将映射到进程地址空间后,就可以直接进行读写操作,而写操作可以立刻反映在屏幕上。   光栅化:光栅化就是把几何数据和像素数据转换为片段的过程。每个片段方块对应于帧缓冲区的一个像素。把定点链接起来形成直线或者计算填充多边形的内部像素时,需要考虑直线和多边形的点画模式、直线的宽度、点的大小、着色模型以及用于支持抗锯齿处理的覆盖计算。每个片断方块都将具有各自的颜色和深度值。   卷积:是一种像素过滤器,用像素本身以及邻近像素的加权平均值来替换这个像素。卷积的应用例子包括模糊和锐化图像、查找图像边缘以及调整图像的对比度。   位图 和图像数据都采用矩形的像素数组格式。他们之间的一个区别就是位图的每个像素是由单个位的信息组成的,而图像的每个像素一般都包含好几段数据。另外,位图就像掩码一样,因为它们一般用于覆盖其他的图像。但是图像数据既可以简单地进行覆盖,也可以采用某种方法与帧缓冲区的数据进行混合。   OpenGL并不支持从文件读取像素和图像以及把像素和图像保存到文件中。   位图是由1和0组成的矩形数组,作为窗口中一个矩形区域的绘图掩码。 假设我们正在绘制一副位图

编程珠玑:位图法排序

眉间皱痕 提交于 2020-01-26 18:54:42
问题描述 输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10 7 。如果在输入文件中有任何正数重复出现就是致命错误。没有其他数据与该正数相关联。 输出:按升序排列的输入正数的列表。 约束:最多有1MB的内存空间可用,有充足的磁盘存储空间可用。运行时间最多几分钟,运行时间为10秒就不需要进一步优化。 程序设计与实现概要: 应用位图或位向量表示集合。可用一个10位长的字符串来表示一个所有元素都小于10的简单的非负整数集合,例如,可以用如下字符串表示集合{1,2,4,5,8}: 0 1 1 1 0 1 0 0 1 0 0 代表集合中数值的位都置为1,其他左所有的位置为0.编程珠玑当中建议是一年个一个具有1000万个位的字符串来表示这个文件,那么这个文件的所占容量为10000000 bit=10 7 bit,不到1MB的大小,其中,当且精当整数i在文件中存在,第i为1,这个表示利用了该问题的三个在排序问题中不常见的属性:输入数据限制在相对较小的范围内;数据没有重复;而且对于每条记录而言,除了单一个整数外没有其他关联数据。 如给定表示文件中整数集合的位图数据结构,则可以分三个阶段来编写程序 第一阶段:将所有的位都置为0,从而将集合初始化为空。 第二阶段:通过读入文件中的每个整数来建立集合,将每个对应的位置都置为1。 第三阶段:检验每一位,如果该为为1,就输出对应的整数

Kotlin入门-文件读写操作

99封情书 提交于 2020-01-26 04:42:33
转 https://blog.csdn.net/aqi00/article/details/83241762 Java的文件处理用到了io库java.io,该库虽然功能强大,但是与文件内容的交互还得通过输入输出流中转,致使文件读写操作颇为繁琐。因此,开发者通常得自己重新封装一个文件存取的工具类,以便在日常开发中调用。下面是一个文件工具类的简单Java代码: public class FileUtil { //保存文本文件 public static void saveText(String path, String txt) { try { FileOutputStream fos = new FileOutputStream(path); fos.write(txt.getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } //读取文本文件 public static String openText(String path) { String readStr = ""; try { FileInputStream fis = new FileInputStream(path); byte[] b = new byte[fis.available()]; fis.read(b);

双缓冲技术绘图原理及简单的VC实现

老子叫甜甜 提交于 2020-01-24 04:13:23
为了增加自己对双缓冲绘图技术的理解,简要做个笔记(以Windows为例): 1、Windows 绘图原理 我们在 Windows 环境下看到各种元素,如菜单、按钮、窗口、图像,从根本上说,都是“画”出来的。这时的屏幕,就相当于一块黑板,而 Windows 下的各种 GDI 要素,如画笔、画刷等,就相当于彩色粉笔了。我们在黑板上手工画图时,是一笔一划的,电脑亦然。只不过电脑的速度比手工快的太多,所以在我们看起来好像所有的图形文字都是同时出现的。 2、普通绘图方式的局限 上述绘图方式我们暂且称之为普通绘图方式吧。虽然这种方式能满足相当一部分的绘图需要,但是当要绘制的对象太复杂,尤其是含有位图时,电脑便力不从心了。这时的画面会显示的很慢,对于运动的画面,会给人“卡”住了的感觉,总之一个字:不爽。 3、解决之道:双缓冲 双缓冲的原理可以这样形象的理解:把电脑屏幕看作一块黑板。首先我们在内存环境中建立一个“虚拟“的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形“拷贝”到另一块黑板(屏幕)上。采取这种方法可以提高绘图速度,极大的改善绘图效果。下面是原理图: 实现过程如下: 1、在内存中创建与画布一致的缓冲区 2、在缓冲区画图 3、将缓冲区位图拷贝到当前画布上 4、释放内存缓冲区 相关的VC函数: 1)、为屏幕 DC 创建兼容的内存DC