调色板

CreateDIBSection

冷暖自知 提交于 2020-04-04 04:20:06
分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。 调色板   有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。   因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每一行记录一种颜色的 R 、 G 、 B 值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第 0 行为 255 , 0 , 0( 红色 ) ,那么当某个象素为红色时,只需要标明 0 即可。   让我们再来计算一下: 16 种状态可以用 4 位 (bit) 表示,所以一个象素要用半个字节。整个图象要用 200×200×0.5 ,约 20k 字节,再加上表占用的字节为 3×16=48 字节 . 整个占用的字节数约为前面的 1/6 ,省很多吧?   这张 R 、 G 、 B 的表,就是我们常说的调色板 (Palette) ,另一种叫法是颜色查找表 LUT(Look Up Table)

CreateDIBSection

牧云@^-^@ 提交于 2020-04-04 04:18:49
理解分辨率 我们常说的屏幕分辨率为640×480,刷新频率为70Hz,意思是说每行要扫描640个象素,一共有480行,每秒重复扫描屏幕70次。 理解调色板 有一个长宽各为200个象素,颜色数为16色的彩色图,每一个象素都用R、G、B三个分量表示。因为每个分量有256个级别,要用8位(bit),即一个字节(byte)来表示,所以每个象素需要用3个字节。整个图象要用200×200×3,约120k字节,可不是一个小数目呀!如果我们用下面的方法,就能省的多。 因为是一个 16 色图,也就是说这幅图中最多只有 16 种颜色,我们可以用一个表:表中的每一行记录一种颜色的 R 、 G 、 B 值。这样当我们表示一个象素的颜色时,只需要指出该颜色是在第几行,即该颜色在表中的索引值。举个例子,如果表的第 0 行为 255 , 0 , 0( 红色 ) ,那么当某个象素为红色时,只需要标明 0 即可。 让我们再来计算一下: 16 种状态可以用 4 位 (bit) 表示,所以一个象素要用半个字节。整个图象要用 200×200×0.5 ,约 20k 字节,再加上表占用的字节为 3×16=48 字节 . 整个占用的字节数约为前面的 1/6 ,省很多吧? 这张 R 、 G 、 B 的表,就是我们常说的调色板 (Palette) ,另一种叫法是颜色查找表 LUT(Look Up Table) ,似乎更确切一些。

Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-15 04:07:26
版权声明:本文为博主原创文章,未经博主允许不得转载。 Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable 这里讲一下如何实现PS调色板中的透明度选择条.首先说一下要点: 1. 透明度选择条实际上是基于白色(0xffffffff)和灰色(0xffcbcbcb)之间的颜色区间选取, 由此我们可以实现一个半透明颜色的选取 2.该应用不仅可以做透明度颜色选取,也可以在应用中实现半透明的图像效果 下面看一下代码,主要是基于Drawable的重写: [java] view plain copy /* * Copyright (C) 2010 Daniel Nilsson * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing,

Delphi GDI对象之绘制位图

邮差的信 提交于 2020-03-13 14:07:50
绘制位图(Drawing Bitmaps) 绘制位图听起来似乎很难,然而如几次所见到的那样,绘制位图非常容易。TCanvas类具有几种方法绘制位图,最常用的方法是Draw方法,这种方法只是在画布上指定位置绘制位图。用户已经见过几个这样的例子。下面是简短的例子。 procedure TForm1.btn1Click(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile('type.bmp'); Canvas.Draw(0, 0, Bitmap); Bitmap.Free; end; 这段代码创建了一个TBitmap对象,装载一副BMP位图,并在窗口的最上角显示。 若显示位图不需修改时,可使用Draw方法。 StretchDraw方法用于改变位图的大小。用户在所需绘制的位图和图像位置确定确定一个矩形框。如果所用矩形框大于位图的原始大小,则放大位图;如果矩形框小于位图的原始大小,则缩小位图,这里是一个例子: procedure TForm1.btn2Click(Sender: TObject); var Bitmap: TBitmap; R: TRect; begin Bitmap := TBitmap.Create; Bitmap.LoadFromFile(

实战——读取并分析BMP图像的十六进制数据

五迷三道 提交于 2020-03-10 20:25:02
文章目录 【内容概述】 【获取16进制数据】 【文件头】 【位图头】 【调色板】 【24位真彩图的位图数据】 【图像灰度化】 【灰度化后数据格式的变化】 【读32×32灰度图片的位图数据】 【位图数据的存储和像素位置的关系】 【总结】 【内容概述】 图像压缩 在ubuntu系统下读出BMP图像的十六进制数据 分析24位真彩BMP文件的文件头、图像头、调色板、位图数据 截取图像中心32×32区域,并灰度化 分析灰度化后带来的改变 位图数据存储方式与像素位置的关系 接下来我们就开始叭 ~ (* ^ ω ^ *) 【图像压缩】 这是一个 非必要 步骤,如果你的原图很小就不用啦。但是如果原图很大的话,建议压缩一下,不然数据量会hin大的。可以用格式工厂做 (有点大材小用嘞但是我首先就想到这个方法) .具体步骤可参考 这个说明 。我通过压缩把原本4032×3016的图像压缩成128×95的了。看看这个变化叭: 【压缩前】 【压缩后】 【获取16进制数据】 这一步我是在Ubuntu系统下进行的,我把原图命名为【ballon.bmp】 (因为是2019跨年时候在珠海长隆拍的小丑气球) 在图片所在文件夹打开终端,输入 $ xxd -i ballon.bmp ballon.h 并回车,具体操作可以参考 这个说明 。然后可以看到文件夹下新生成了一个.h文件,打开之后就可以看到十六进制的数组啦。

Access and Use Individual Instruments

前提是你 提交于 2020-01-24 01:12:28
Access and Use Individual Instruments 在跟踪文档中,称为工具的单个数据收集模块随着时间的推移收集有关应用程序、进程或设备的数据。每个工具收集并显示特定类型的信息,如文件访问、内存使用或网络活动。仪器包括大量的仪器库,这些仪器是为了满足大多数开发人员的需要而设计的。高级开发人员,但也可以开发自己的自定义工具,使用DTrace来收集其他数据。Within a trace document, individual data collection modules known as instruments collect data about an app, process, or device over time. Each instrument collects and displays a specific type of information, such as file access, memory use, or network activity. Instruments includes an extensive library of instruments, which are designed to meet the needs of most developers. Advanced developers, however, can

BMP、PNG格式解析

匆匆过客 提交于 2020-01-19 03:07:07
一、BMP 1.BMP简介 微软定义一种图片数据格式。 .....位图数据..... 2.文件信息头 3.位图信息头 需要 特别注意:biHeight数据域,有正有负值,代表意义不同 。 4.彩色表和颜色 如果图像是单色、16色和256色,则紧跟着调色板的是位图数据,位图数据是指向调色板的索引序号。 如果位图是16位、24位和32位色,则图像文件中不保留调色板,图像的颜色直接在位图数据中存储。 16位图像使用2字节保存颜色值,555(rgb 只适用15位)、565(rgb)格式 24位图像使用3字节保存颜色值,RGB(红、绿、蓝) 32位图像使用4字节保存颜色值,RGBA (红、绿、蓝、透明度) 当图像带有调色板时,位图数据可以根据需要选择压缩与不压缩,如果选择压缩,则跟BMP图像是16色或256色,采用RLE4或RLE8压缩算法压缩。 RLE8与RLE4唯一区别在于,RLE8使用1字节存放颜色索引,而RLE4使用4位存放颜色索引。 二、PNG 1.基本结构 2.PNG文件标志 PNG文件标志由8字节数据组成:89 50 4E 47 0D 0A 1A 0A ,其中50 4E 47对应ASCII值"PNG‘’。 3.数据块 紧跟PNG文件标志后面的就是数据块。 数据块分为两类:关键数据块和辅助数据块。 关键数据块在PNG文件中是必须有的,辅助数据块是可选的。 3.1关键数据块

【先进的应用开发】touchgfx 之 《Using the L8 Image Format》

我的梦境 提交于 2020-01-17 00:52:17
使用L8图像格式 从TouchGFX 4.12.3开始 TouchGFX 4.12现在支持L8标准图像格式格式。 与ARGB8888等相比,L8格式的图像占用较少的闪存,并且绘制速度更快。 L8格式的图像由一个调色板和一个像素阵列组成:调色板最多列出256种不同的颜色,分别以16位格式RGB565、24位格式RGB888或32位格式ARGB8888指定。 像素阵列由每个像素一个字节组成。 该字节是调色板(颜色列表)的索引,指出像素的颜色。 TouchGFX框架通过依次读取像素,查找调色板中的颜色并将其写入帧缓冲区来绘制L8图像。 这会自动发生,并由STM32 Chrom ART硬件加速器加速。 8位至今 像素表示一张L8图像可以使用256种不同的颜色。 另一个L8图像可以使用256种其他颜色,因为两个图像都有各自的调色板。 具有4 x 4像素的L8图像和具有4种颜色的调色板 像素每个为一个字节(8位)。 因此,像素的大小是宽度x高度字节。 调色板颜色可以是16位,24位或32位颜色。 因此,每个颜色定义将占用2、3或4个字节。 如果帧缓冲区是16位(RGB565格式),则纯色图像应存储在L8_RGB565中。 如果帧缓冲区是24位(RGB888),则L8图像必须以L8_RGB888格式存储。 如果图像是透明的,则必须使用32位格式(ARGB8888): 格式 帧缓冲格式

常见图片格式PNG,JPEG,BMP,GIF区别总结

左心房为你撑大大i 提交于 2019-12-31 04:47:08
在前端工作久了经常会遇到各种格式的图片文件,现文做一些区别总结,帮助理解但不深入。 【PNG】(Portable Network Graphics) PNG是一种无损压缩的位图图形格式,主要有PNG8、PNG24、PNG32三种格式,主要区别如下: PNG8)8位PNG,最大支持2的8次方=256色,支持256阶alpha透明,支持索引色透明 PNG24)24位PNG,最大支持2的24次方>1600万色,不支持256阶alpha透明和索引色透明 PNG32)32位PNG,最大支持2的24次方>1600万色,在PNG24的基础上补了8位,用于支持256阶alpha透明,不支持索引色透明 【JPEG】(Joint Photographic Experts Group) JPG的文件格式是JPEG,由于早期系统文件扩展名只支持3个字符,所以简写成了JPG,由于养成了习惯,JPG比JPEG更流行,本质没有区别。 JPEG不能存储透明信息。 JPEG的压缩标准可分为标准JPEG、渐进式JPEG及JPEG2000三种,主要区别如下: 标准JPEG)以24位存储颜色的格式。展现方式为由上而下依次加载图片,直到图片全部加载完成,才能看到完整的图片。支持压缩,但可能有损耗。 渐进式JPEG)标准JPEG的改良格式。展现方式为交错加载图片,先呈现模糊外观,等到全部加载完再显示完整的原图。