怎么建立位图文件

合集下载

位图文件(BMP)

位图文件(BMP)

位图⽂件(BMP)位图⽂件简介BMP(Bitmap-File)格式是最常⽤的图像⽂件存取格式之⼀,是微软为其Windows环境设置的标准图像格式,BMP位图⽂件默认的⽂件扩展名是“.BMP”或者“.bmp”,有时它也会以“.DIB”或者“RLE”为扩展名。

⽤BMP格式存放的图像⼏乎可以被所有的图像显⽰软件读取。

BMP图形⽂件是Windows采⽤的图像⽂件格式,在Windows环境下运⾏的所有图像软件都⽀持BMP图像⽂件格式。

Windows系统内部个图像绘制操作都是以BMP为基础的。

Windows3.0以前的BMP⽂件格式与显⽰设备有关,因此把这种BMP图像⽂件格式称为设备相关位图(Device Dependent Bitmap,DDB)⽂件格式。

Windows3.0以后的BMP⽂件都与显⽰设备⽆关,因此把这种BMP⽂件格式称为设备⽆关位图(Device Independent Bitmap,DIB)格式。

BMP⽂件格式摘要每个BMP⽂件只能存放⼀张图像。

图像数据是否采⽤压缩⽅式存放,取决于⽂件的⼤⼩与格式,即压缩处理是BMP图像⽂件的⼀个选项,⽤户可以根据需要进⾏选择。

其中,⾮压缩格式是BMP图像⽂件所采⽤的⼀种通⽤格式,它按照⼀定的顺序忠实的记录图像中每⼀个像素的颜⾊值。

如果⽤户确定将BMP⽂件格式压缩处理,则Windows设计了⼀种压缩⽅式:如果位图为16⾊模式,则采⽤RLE4压缩⽅式,如果图像为256⾊模式,则采⽤RLE8压缩⽅式。

BMP图像数据⽂件格式可以存储为单⾊,16⾊,256⾊和真彩⾊四种图像数据,其数据的排列顺序与⼀般⽂件不同,它以图像的左下⾓作为起点存储图像,⽽不是以图像的坐上⾓为起点。

⽽且BMP图像⽂件格式中还存在另外⼀个与众不同的特点,即其调⾊板数据所采⽤的数据结构中,红,绿,蓝三种基⾊数据的排列顺序也恰好与其他图像⽂件格式相反。

总之,BMP图像⽂件格式拥有许多适合于Windows环境的新特⾊,⽽且随着Windows版本的不断更新,微软也在不断的改进BMP图像⽂件格式。

绘制BMP位图文件

绘制BMP位图文件

绘制BMP位图文件BMP文件由三部分组成:有关文件信息的BITMAPFILEHEADER,有关位图信息的BITMAPINFO以及位图的图象数据。

其中BITMAPINFO又由位图信息头BITMAPINFOHEADER和颜色表组成,颜色表不是必须的。

几个结构的定义可查看联机帮助。

一旦把BMP位图读入内存后,只要用上一篇介绍的显示位图的方法就可以显示了。

函数1:装载位图文件,生成位图GDI对象,用DDB方法显示。

// LoadBMPImage - 装载BMP位图,创建位图GDI对象同时创建位图调色板// Returns - 返回TRUE成功// sBMPFile - 全路经BMP文件// bitmap - 将被初始化的位图对象// pPal - 将被初始化的位图调色板,可为NULLBOOL LoadBMPImage( LPCTSTR sBMPFile, CBitmap& bitmap, CPalette *pPal ) {CFile file;if( !file.Open( sBMPFile, CFile::modeRead) )return FALSE;BITMAPFILEHEADER bmfHeader;//读文件头if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) !=sizeof(bmfHeader))return FALSE;// 文件类型标志是否为‘BM’if (bmfHeader.bfType != ((WORD) ('M' << 8) | 'B'))return FALSE;//获得文件将需的内存数DWORD nPackedDIBLen = file.GetLength() -sizeof(BITMAPFILEHEADER);HGLOBAL hDIB= ::GlobalAlloc(GMEM_FIXED, nPackedDIBLen);if (hDIB == 0)return FALSE;// 读余下的位图文件if (file.ReadHuge((LPSTR)hDIB, nPackedDIBLen) != nPackedDIBLen ){::GlobalFree(hDIB);return FALSE;}BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;// 位图颜色数intnColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed :1<<bmiHeader.biBitCount;LPVOID lpDIBBits;if(bmInfo.bmiHeader.biBitCount> 8 )lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +((bmInfo.bmiHeader.biCompression ==BI_BITFIELDS) ? 3 : 0));elselpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);// 创建逻辑调色板if(pPal != NULL ){if(nColors<= 256 ){UINT nSize = sizeof(LOGPALETTE) +(sizeof(PALETTEENTRY) * nColors);LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];pLP->palVersion = 0x300;pLP->palNumEntries = nColors;for(int i=0; i <nColors; i++){pLP->palPalEntry[i].peRed =bmInfo.bmiColors[i].rgbRed;pLP->palPalEntry[i].peGreen =bmInfo.bmiColors[i].rgbGreen;pLP->palPalEntry[i].peBlue =bmInfo.bmiColors[i].rgbBlue;pLP->palPalEntry[i].peFlags = 0;}pPal->CreatePalette( pLP );delete[] pLP;}}CClientDCdc(NULL);CPalette* pOldPalette = NULL;if(pPal ){pOldPalette = dc.SelectPalette( pPal, FALSE );dc.RealizePalette();}HBITMAP hBmp = CreateDIBitmap( dc.m_hDC, // 设备句柄&bmiHeader, // pointer to bitmap size and format dataCBM_INIT, // initialization flaglpDIBBits, // pointer to initialization data&bmInfo, // pointer to bitmap color-format dataDIB_RGB_COLORS); //color-data usagebitmap.Attach(hBmp );if(pOldPalette )dc.SelectPalette(pOldPalette, FALSE );::GlobalFree(hDIB);return TRUE;}函数2:装载位图文件,生成位图设备句柄,用DIB方法显示。

BMP位图文件结构及操作

BMP位图文件结构及操作

---- 2. 申请内存空间用于存放位图文件
---- GlobalAlloc(GHND,FileLength);
---- 3. 位图文件读入所申请内存空间中
---- LoadFileToMemory( mpBitsSrc,mFileName);
---- 4. 在OnPaint等函数中用DrawDibRealize(),DrawDibDraw()显示位图
typedef struct tagRGBQUAD {
BYTErgbBlue;// 蓝色的亮度(值范围为0-255)
BYTErgbGreen; // 绿色的亮度(值范围为0-255)
BYTErgbRed; // 红色的亮度(值范围为0-255)
BYTErgbReserved;// 保留,必须为0
---- 三、BMP位图缩放显示
---- 用DrawDib视频函数来显示位图,内存占用少,速度快,而且还可以对图形进行淡化(Dithering )处理。淡化处理是一种图形算法,可以用来在一个支持比图像所用颜色要少的设备上显示彩色图像。BMP位图显示方法如下:
---- 1. 打开视频函数DrawDibOpen(),一般放在在构造函数中
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数
DWORD biClrImportant;// 位图显示过程中重要的颜色数
} BITMAPINFOHEADER;
---- 4. 颜色表
---- 颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:
>biHeight, SRCCOPY);

创建位图

创建位图
{
//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// int bpl = (nwidth*8+31)/32*4;
// int imageSize = nheight*bpl;
int iBMPPitch = (nwidth *bit +31) /32 *4;
int iSrcPitch = nwidth *bit /8;
// int pline=WIDTHBYTES(nwidth*8);
if(fBMP == INVALID_HANDLE_VALUE)
{
return;
}
DWORD dwWritten = 0;
WriteFile(fBMP, &bfh, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
}
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
BYTE* imgData = NULL;
if(bit == 24)
{
imgData = new BYTE[bih.biSizeImage];
ZeroMemory((void*)imgData, bih.biSizeImage);
BYTE* pSrc = buffer;

第28章 创建和编辑位图

第28章 创建和编辑位图

“大小”:设置刷子笔尖的大小。 “边缘”:指定刷子笔尖的柔度。 “形状”:设置圆形或方形刷子笔尖形状。 “强度”:设置模糊或锐化量。 (3)在要模糊的像素上拖动工具。 注意:按住Alt键可以切换工具的行为。
6.锐化工具 锐化工具对于修复存在扫描问题或聚焦不准的照片很有用,它是用来将图像相邻 颜色的反差加大,使图像的边缘更锐利。锐化工具的使用方法和模糊工具的使用 方法相同。其属性面板也一样。用鼠标在图像内反复拖动,即可锐化图像。 7.涂抹工具 使用涂抹工具可以使图像产生涂抹的效果,其操作如下: (1)选择涂抹工具。 (2)在属性面板中设置工具选项,其属性面板如图所示,各项含义如下:
3.替换颜色工具 “替换颜色”工具可以选择一种颜色,并用另外一种颜色覆盖此颜色进行绘画。 若要使用颜色样本用一种颜色替换另一种颜色,操作步骤如下: (1)选择“替换颜色”工具。 (2)在“属性”面板的“源色”框中,单击“样本”,如图所示。
(3)单击“源色”选色表选择颜色样,并从弹出菜单中选择一种颜色以指定要替 换的颜色。 (4)单击“属性”面板中的“替换色”选色表,并从弹出菜单中选择一种颜色。 (5)在“属性”检查器中设置其他笔触属性。各选项的含义如下。 “大小”设置刷子笔尖的大小。 “形状”设置圆形或方形刷子笔尖形状。 “容差”确定要替换的颜色范围(0 表示只替换“替换色”颜色;255 表示替换所 有与“替换色”颜色相似的颜色)。 “强度”确定将替换多少“更改”颜色。 “彩色化”用“替换色”颜色替换“更改”颜色。取消选择“彩色化”可以用 “更改”颜色对“源色”颜色进行涂染,并保持一部分“更改”颜色不变。 (6)将该工具拖动到要替换的颜色上。
1.利用其他软件(例如Photoshop)中的图像创建新位图图像 (1)将其他软件中的图像或部分图像复制到剪贴板中。 (2)执行“编辑/粘贴”菜单命令。 2.利用Fireworks中的图像创建新位图图像 (1)使用选取框工具或其他创建选区的工具在画布中创建一 个选区。 (2)执行“编辑/复制/剪切”菜单命令。 (3)执行“编辑/插入/通过复制创建位图或通过剪切创建位 图”菜单命令,即可将选区中所选图像插入到一个新位图图 层中。

位图文件(BMP)格式分析以及程序实现

位图文件(BMP)格式分析以及程序实现

inf.read((char*)&header, sizeof(header));if(header.bfType != 0x4D42)return false;这个很简单,没有什么好说的。

2、加载位图信息头//Load the image information headerBITMAPINFOHEADER infoheader;memset(&infoheader, 0, sizeof(infoheader));inf.read((char*)&infoheader, sizeof(infoheader));m_iImageWidth = infoheader.biWidth;m_iImageHeight = infoheader.biHeight;m_iBitsPerPixel = infoheader.biBitCount;这里我们得到了3各重要的图形属性:宽,高,以及每个像素颜色所占用的位数。

3、行对齐由于Windows在进行行扫描的时候最小的单位为4个字节,所以当图片宽X 每个像素的字节数!= 4的整数倍时要在每行的后面补上缺少的字节,以0填充(一般来说当图像宽度为2的幂时不需要对齐)。

位图文件里的数据在写入的时候已经进行了行对齐,也就是说加载的时候不需要再做行对齐。

但是这样一来图片数据的长度就不是:宽X 高X 每个像素的字节数了,我们需要通过下面的方法计算正确的数据长度://Calculate the image data sizeint iLineByteCnt = (((m_iImageWidth*m_iBitsPerPixel) + 31) >> 5) << 2;m_iImageDataSize = iLineByteCnt * m_iImageHeight;4、加载图片数据对于24位和32位的位图文件,位图数据的偏移量为sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER),也就是说现在我们可以直接读取图像数据了。

点位图生成方式

点位图生成方式

点位图生成方式1、将野外搜集数据导出,放入电子表格,只需要横坐标、纵坐标和点号。

顺序为:横坐标、纵坐标、点号。

2、把横纵坐标转化和GIS匹配。

例如:1/5万将横纵坐标都除以50。

3、将转化后的坐标复制到另一个工作表,在第一行插入notgrid。

4、把工作表另存为逗号分隔格式,再用记事本打开所存的逗号分隔的文件,将notgrid后的两个逗号去掉。

5、再另存为det文件,在GIS空间分析DTM分析中打开所存的det文件,在工具栏中单击高程点标注,设置点参数。

6、将该文件另存点文件。

7、在GIS图形处置输入编辑中打开,删除不需要的点文件,然后保留。

8、感动工作图,把保留后的点文件添加即可。

Mapsource与Excel、Mapgis相结合在化探工作中的应用摘要:目前GPS、Mapsource、Mapgis、Excel等已在地质工作中取得普遍的应用。

本文通过论述手持GPS坐标数据经mapsource、Excel进行转换和整理;利用Mapgis地理分析系统中的空间分析模型子系统、投影变换模型子系统及输入编辑子模型系统,实现化探测点自动标注、化探异样图的自动圈定。

拓展了Mapgis在地质工作中的应用空间,极大的方便了地质人员野外工作,减少人为误差,提高了工作效率。

关键词:GPS;Mapsource;Mapgis;Excel;地球化学测量中图分类号:文献标识码:矿产地质普查中常常需要进行一系列地球化学测量工作,从而形成大量的分析数据。

如何借助于运算机对这些数据进行处置,编制相应的地球化学图件,一直以来都是野外生产一线地质人员所追求的目标。

本文表达的是作者在利用mapsource、Excel、mapgis软件处置化探数据,编制相关地球化学图件进程中的一点体会和体会,供同行们参考。

不妥的地方请批评指正。

1.地球化学勘查经常使用图件图1 Mapsource中的单位设置Fig.1 In Mapsource unit establishment地球化学勘查的要紧图件有[一、2]:实际材料图、原始数据图、符号图、直方图、等值线图、地球化学剖面图、地球化学平面剖面图、地球化学异样图(单元素、多元素)、推断解译图、综合异样图等10种图件。

SharpDX之Direct2D教程II——加载位图文件和保存位图文件

SharpDX之Direct2D教程II——加载位图文件和保存位图文件

绘制位图是绘制操作的不可缺少的一部分。

在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再绘制到RenderTarget中去在SharpDX中绘制位图,分成两个部分:利用WIC在SharpDX中加载位图,生成Bitmap对象利用RenderTarget对象的DrawBitmap方法把Bitmap对象绘制到RenderTarget中去利用WIC在SharpDX中加载位图文件利用WIC在SharpDX中绘制位图文件的核心内容就是把位图文件转换为Bitmap对象。

它的操作过程如下:1、创建WIC的ImagingFactory类。

2、根据位图文件创建BitmapDecoder对象(实际上调用系统解码器解析位图文件)。

BitmapDecoder对象有1个属性和1个函数FrameCount属性:只读属性,说明该位图对象包含的帧数。

一般gif文件能包含多个帧,其余格式的一般只有1个帧GetFrame函数:返回指定帧对象。

参数index是整形,说明是第几帧(从0开始)。

返回的是BitmapFrameDecode对象3、利用BitmapDecoder对象的GetFrame函数,返回指定帧的BitmapFrameDecode对象。

(参数index一般是0,返回第1帧)一般情况下,到此就可以了。

但是,位图格式有很多,你可能不是很确定你的位图格式是否兼容SharpDX的Bitmap对象。

因此,比较好的做法是继续下面的步骤,将位图格式转换为兼容SharpDX 的Bitmap对象4、创建FormatConverter对象。

该对象负责进行格式转换。

5、调用FormatConverter对象的Initialize方法,进行格式转换。

6、最后,利用Bitmap对象的FromWicBitmap函数将之前的FormatConverter对象转换为SharpDX的Bitmap对象和Windows API Code Pack 1.1中的Direct2D略有不同的是,BitmapFrameDecode对象和FormatConverter对象都继承BitmapSource对象,省去了一个转换的过程下面是代码Protected Function LoadBitmap(Render As D2D.RenderTarget, File As String, FrameIndex As Integer) As D2D.BitmapDim Decoder As New WIC.BitmapDecoder(_ImagingFactory, File,DX.IO.NativeFileAccess.Read, WIC.DecodeOptions.CacheOnLoad)If FrameIndex > Decoder.FrameCount - 1 OrElse FrameIndex <0 Then FrameIndex = 0Dim Source As WIC.BitmapFrameDecode = Decoder.GetFrame(FrameIndex)Dim Converter As New WIC.FormatConverter(_ImagingFactory)Converter.Initialize(Source, WIC.PixelFormat.Format32bppPBGRA)Return D2D.Bitmap.FromWicBitmap(Render, Converter)End Function利用RenderTarget对象的DrawBitmap方法把Bitmap对象绘制到RenderTarget中去下面是DrawBitmap方法的原型定义:Public Sub DrawBitmap(bitmap As D2D.Bitmap,destinationRectangle As DX.RectangleF, opacity As Single,interpolationMode As D2D.BitmapInterpolationMode,sourceRectangle As DX.RectangleF)Public Sub DrawBitmap(bitmap As D2D.Bitmap, opacity As Single, interpolationMode As D2D.BitmapInterpolationMode)Public Sub DrawBitmap(bitmap As D2D.Bitmap,destinationRectangle As DX.RectangleF, opacity As Single,interpolationMode As D2D.BitmapInterpolationMode)Public Sub DrawBitmap(bitmap As D2D.Bitmap, opacity As Single, interpolationMode As D2D.BitmapInterpolationMode,sourceRectangle As DX.RectangleF)参数的意义如下:bitmap:要绘制的Bitmap对象destinationRectangle:绘制在RenderTarget对象上的目标范围。

CAD教程 位图插入与剪贴处理

CAD教程 位图插入与剪贴处理

CAD教程:位图插入与剪贴处理在CAD设计过程中,我们经常需要将位图插入到绘图中,并进行一些剪贴处理。

本教程将介绍如何在AutoCAD软件中实现位图插入与剪贴处理的基本操作步骤和常用技巧。

第一步:位图插入1. 打开AutoCAD软件,新建一个绘图文件。

2. 在插入选项卡中的“参考”面板上,点击“图像”图标,或在命令行中输入“image”,然后按回车键。

3. 弹出的“插入图像”对话框中,点击“浏览”按钮,选择要插入的位图文件并点击“打开”。

4. 在“插入图像”对话框中,设置插入的位置和尺寸,并点击“确定”按钮。

可以直接点击确定,使用默认设置。

5. 位图将被插入到绘图中,根据需要可以通过移动、缩放和旋转等操作调整位图的位置和大小。

第二步:位图剪贴1. 选中要进行剪贴处理的位图,点击“修改”选项卡中的“图像”面板上的“剪贴”图标,或在命令行中输入“clip”,然后按回车键。

2. 在命令行中提示选择剪贴边界的方式时,选择“矩形”或“多边形”。

3. 根据选择的方式,用鼠标指定矩形或多边形的边界点,然后按回车键确认。

4. 位图将被剪贴为指定的边界形状。

常用技巧:1. 位图插入的比例:在插入图像对话框中,可以设置插入的比例。

默认情况下,CAD会尝试将位图按原始比例插入。

如果需要按比例缩放,可以先勾选“锁定纵横比”选项,然后设置缩放比例。

2. 位图的位置和大小调整:插入位图后,可以使用移动、缩放和旋转等操作调整位图的位置和大小。

选中位图后,点击“修改”选项卡中的“修改”面板上的相应操作图标,或在命令行中输入相应的命令进行操作。

3. 多次剪贴处理:可以多次使用“剪贴”命令进行位图的进一步处理。

根据需要可以选择不同的剪贴边界形状,并重复执行剪贴命令。

4. 剪贴设置:在剪贴操作中,可以根据需要设置剪贴的边界形状和是否保留原始位图。

在命令行中输入“设置”命令,打开“选项”对话框,点击“解图像”选项卡,在“剪切设置”中进行设置。

位图文件格式浅析和图形颜色转换

位图文件格式浅析和图形颜色转换

位图格式转换的应用场景
图片编辑和设计
位图格式转换在图片编辑和设计中应用广泛,如将JPEG格式转换为PNG格式以保留透明 度,或将BMP格式转换为JPEG格式以减小文件大小。
网页制作和开发
在网页制作和开发中,位图格式转换常用于优化网页图片资源,如将大尺寸的位图转换为 小尺寸的PNG或JPEG格式,以加快网页加载速度。
03
BMP(Bitmap Image File): 微软开发的位图格式, 无压缩,文件较大。
位图格式的特点与适用场景
特点
文件大小相对较小,易于网络传 输;色彩丰富,支持多种颜色模 式;不支持矢量操作。
适用场景
适用于显示连续色调的图像,如 照片、壁纸等;不适合制作复杂 的图形设计。
02
PNG位图文件格式
和损失。
02 03
了解源格式和目标格式的差异
不同的位图格式支持不同的压缩算法、色彩模式和透明度设置等,因此 在进行格式转换前,需要了解源格式和目标格式的差异,以便进行适当 的调整。
考虑色彩空间和色彩深度
不同的位图格式支持不同的色彩空间和色彩深度,因此在转换格式时, 需要考虑图像的色彩空间和色彩深度,以确保图像的色彩信息得到正确 的保留。
由于GIF的开放性和广泛支持,它可以在各种操作系统和软件中打开 和编辑。
GIF格式的应用
网站设计
由于其支持透明度和动画,GIF广泛应用于网页 设计中的背景、按钮、图标等元素。
演示和教程
在创建演示文稿或在线教程时,GIF可以用作动 态图像或图表。
ABCD
社交媒体
在社交媒体ห้องสมุดไป่ตู้台上,GIF通常用于传达情感、表 情或动态效果。
03
JPEG位图文件格式

pwg格式bitmap生成方法

pwg格式bitmap生成方法

pwg格式bitmap生成方法1.简介在图像处理中,p wg格式是一种常用的位图图像格式。

本文将介绍p w g格式b it ma p生成方法,包括如何创建和修改pw g格式的图像。

通过学习本文,您将了解p wg格式bi tm a p的基本原理,以及如何应用它们在图像处理中。

2. pw g格式bitma p概述p w g格式b it ma p是一种用于表示图像的文件格式,它由像素点阵组成,每个像素点都有不同的颜色值。

p wg格式bi tm ap是一种通用的图像格式,广泛应用于各种领域,如数字图像处理、计算机视觉和图形设计等。

3.pw g格式bitma p生成方法3.1创建p w g格式b i t m a p要创建p wg格式bi tm a p,您可以按照以下步骤进行操作:1.准备图像数据:收集您要包含在p w g格式bi tm ap中的像素点数据。

您可以使用图像编辑软件或编程语言来生成像素点数据。

2.新建pw g格式b it m ap文件:使用任意文本编辑器创建一个新的文件,文件后缀名通常为.pw g。

3.添加头部信息:在p wg文件的开头添加必要的头部信息,包括图像的宽度、高度和颜色模式等。

4.写入像素数据:将像素点数据按照一定的格式写入pw g文件中。

5.保存pw g文件:保存文件,即可生成一个pw g格式b it ma p。

3.2修改p w g格式b i t m a p您可以通过以下方法修改现有的p wg格式b it ma p:1.打开pw g文件:使用文本编辑器打开目标pw g文件。

2.定位要修改的像素点:查找需要修改的像素点在p wg文件中的位置。

3.修改像素点数值:根据您的需求,修改相应像素点的颜色值。

4.保存文件:保存pw g文件,更新了修改后的图像数据。

4.应用范例p w g格式b it ma p生成方法可以应用于各种图像处理场景。

以下是一些常见的应用范例:4.1图像编辑软件使用pw g格式b it ma p生成方法,图像编辑软件可以创建、编辑和保存p wg格式的图像文件。

C++保存HBITMAP为位图文件

C++保存HBITMAP为位图文件

C++保存HBITMAP为位图⽂件本⽂为转载内容微加⼯,原⽂地址:。

本⽂使⽤C++将位图句柄HBITMAP保存为位图⽂件,配合C++抓图代码可以实现抓图保存⽂件(.bmp)。

其步骤如下:1、创建位图⽂件;2、计算位图中每个像素所占字节数;3. 获取位图结构BITMAP;4、构造位图信息头BITMAPINFOHEADER;5、构造位图⽂件头BITMAPFILEHEADER;6、为位图内容分配内存;7、处理调⾊板;8、写⼊⽂件;9、清除资源。

下⾯是C++源代码:ImageHelper.h#pragma once#include <windows.h>#include <string>using namespace std;class ImageHelper{public:static bool SaveBitmapToFile(HBITMAP bitmap, const string& filename); //保存位图到⽂件private:static WORD GetBitmapBitCount(); //计算位图⽂件每个像素所占字节数static void ProcessPalette(HBITMAP hBitmap, const BITMAP& bitmap,DWORD paletteSize, LPBITMAPINFOHEADER lpBmpInfoHeader); //处理调⾊板};ImageHelper.cpp#include "ImageHelper.h"#include <shlwapi.h>bool ImageHelper::SaveBitmapToFile(HBITMAP hBitmap, const string& filename){//1. 创建位图⽂件const auto file = CreateFileA(filename.c_str(), GENERIC_WRITE,0, nullptr, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,nullptr);if (file == INVALID_HANDLE_VALUE){return false;}//2. 计算位图⽂件每个像素所占字节数const auto bitCount = GetBitmapBitCount();//3. 获取位图结构BITMAP bitmap;::GetObject(hBitmap, sizeof(bitmap), reinterpret_cast<LPSTR>(&bitmap));//位图中像素字节⼤⼩(32字节对齐)const DWORD bmBitsSize = ((bitmap.bmWidth * bitCount + 31) / 32) * 4 * bitmap.bmHeight;//调⾊板⼤⼩const DWORD paletteSize = 0;//4. 构造位图信息头BITMAPINFOHEADER bmpInfoHeader; //位图信息头结构bmpInfoHeader.biSize = sizeof(BITMAPINFOHEADER);bmpInfoHeader.biWidth = bitmap.bmWidth;bmpInfoHeader.biHeight = bitmap.bmHeight;bmpInfoHeader.biPlanes = 1;bmpInfoHeader.biBitCount = bitCount;bmpInfoHeader.biCompression = BI_RGB;bmpInfoHeader.biSizeImage = 0;bmpInfoHeader.biXPelsPerMeter = 0;bmpInfoHeader.biYPelsPerMeter = 0;bmpInfoHeader.biClrImportant = 0;bmpInfoHeader.biClrUsed = 0;//5. 构造位图⽂件头BITMAPFILEHEADER bmpFileHeader;bmpFileHeader.bfType = 0x4D42; //"BM"//位图⽂件⼤⼩const DWORD dibSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + paletteSize + bmBitsSize; bmpFileHeader.bfSize = dibSize;bmpFileHeader.bfReserved1 = 0;bmpFileHeader.bfReserved2 = 0;bmpFileHeader.bfOffBits = static_cast<DWORD>(sizeof(BITMAPFILEHEADER))+ static_cast<DWORD>(sizeof(BITMAPINFOHEADER)) + paletteSize;//6. 为位图内容分配内存const auto dib = GlobalAlloc(GHND, bmBitsSize + paletteSize + sizeof(BITMAPINFOHEADER)); //内存句柄const auto lpBmpInfoHeader = static_cast<LPBITMAPINFOHEADER>(GlobalLock(dib)); //指向位图信息头结构*lpBmpInfoHeader = bmpInfoHeader;//7. 处理调⾊板ProcessPalette(hBitmap, bitmap, paletteSize, lpBmpInfoHeader);//8. 写⼊⽂件DWORD written = 0; //写⼊⽂件字节数WriteFile(file, reinterpret_cast<LPSTR>(&bmpFileHeader), sizeof(BITMAPFILEHEADER),&written, nullptr); //写⼊位图⽂件头WriteFile(file, reinterpret_cast<LPSTR>(lpBmpInfoHeader), dibSize,&written, nullptr); //写⼊位图⽂件其余内容//9. 清理资源GlobalUnlock(dib);GlobalFree(dib);CloseHandle(file);return true;}//计算位图⽂件每个像素所占字节数WORD ImageHelper::GetBitmapBitCount(){const auto dc = ::CreateDCA("DISPLAY", nullptr, nullptr, nullptr);//当前分辨率下每像素所占字节数const auto bits = ::GetDeviceCaps(dc, BITSPIXEL) * GetDeviceCaps(dc, PLANES);::DeleteDC(dc);//位图中每像素所占字节数WORD bitCount;if (bits <= 1)bitCount = 1;else if (bits <= 4)bitCount = 4;else if (bits <= 8)bitCount = 8;elsebitCount = 24;return bitCount;}//处理调⾊板void ImageHelper::ProcessPalette(HBITMAP hBitmap, const BITMAP& bitmap,DWORD paletteSize, LPBITMAPINFOHEADER lpBmpInfoHeader){HANDLE oldPalette = nullptr;HDC dc = nullptr;const auto palette = GetStockObject(DEFAULT_PALETTE);if (palette != nullptr){dc = ::GetDC(nullptr);oldPalette = ::SelectPalette(dc, static_cast<HPALETTE>(palette), FALSE);::RealizePalette(dc); //实现设备调⾊板}//获取该调⾊板下新的像素值GetDIBits(dc, hBitmap, 0, static_cast<UINT>(bitmap.bmHeight),reinterpret_cast<LPSTR>(lpBmpInfoHeader) + sizeof(BITMAPINFOHEADER) + paletteSize,reinterpret_cast<BITMAPINFO*>(lpBmpInfoHeader), DIB_RGB_COLORS);//恢复调⾊板if (oldPalette != nullptr){::SelectPalette(dc, static_cast<HPALETTE>(oldPalette), TRUE);::RealizePalette(dc);::ReleaseDC(nullptr, dc); }}。

DIB位图文件的格式、读取、保存和显示(转载)

DIB位图文件的格式、读取、保存和显示(转载)

DIB位图⽂件的格式、读取、保存和显⽰(转载)⼀、位图⽂件结构位图⽂件由三部分组成:⽂件头 + 位图信息 + 位图像素数据1、位图⽂件头:BitMapFileHeader。

位图⽂件头主要⽤于识别位图⽂件。

以下是位图⽂件头结构的定义:typedef struct tagBITMAPFILEHEADER { // bmfhWORD bfType; //bfType指定⽂件类型。

其值必须是0x4d42,即字符串“MB”,也就是说所有“.bmp”⽂件的头两个字节都是”MB“,标志该⽂件是位图⽂件。

DWORD bfSize; //bfSize的值是位图⽂件的⼤⼩,包括4个字节。

WORD bfReserved1;WORD bfReserved2; //bfReserved1,bfReserved2为保留字,不⽤考虑。

DWORD bfOffBits; //为从⽂件头到实际的位图数据的偏移字节数,} BITMAPFILEHEADER该结构的长度是固定的,为14个字节(WORD 为⽆符号16位整数,DWORD为⽆符号32位整数)。

2、位图信息:BitMapInfo。

位图信息中所记录的值⽤于分配内存,设置调⾊板信息,读取像素值等。

以下是位图信息结构的定义:1. typedef struct tagBITMAPINFO {2. BITMAPINFOHEADER bmiHeader; //位图信息头3. RGBQUAD bmiColors[1]; //颜⾊表4. } BITMAPINFO;可见位图信息也是由两部分组成的:位图信息头 + 颜⾊表/调⾊板(Palette)2.1 、位图信息头:BitMapInfoHeader。

位图信息头包含了单个像素所⽤字节数以及描述颜⾊的格式,此外还包括位图的宽度、⾼度、⽬标设备的位平⾯数、图像的压缩格式。

以下是位图信息头结构的定义:1. typedef struct tagBITMAPINFOHEADER{ // bmih2. DWORD biSize; //指定结构BITMAPINFOHEADER的字节数,为40个字节,即sizeof(BITMAPINFOHEADER)*3. LONG biWidth; //以像素为单位的图像宽度*4. LONG biHeight; // 以像素为单位的图像长度*5. WORD biPlanes; //⽬标设备的位平⾯数,必须是1,不⽤考虑。

创建位图图像PPT课件

创建位图图像PPT课件
选矢量图转换为位图
• 如果要把所选矢量图转换为位图,可以单击【修改】菜单上的【平面化所选】命令。
第5页/共6页
感谢您的观看!
第6页/共6页
创建位图图像
Creare un'immagine bitmap
第1页/共6页
使用位图工具创建位图图像
• 从工具箱的【位图】区中选择【刷子】或【铅笔】工具在画布上绘制图像,新创建的位图对象随即被添加 到图层面板的当前层中。
第2页/共6页
创建空位图对象
• 创建空位图对象时,首先创建一个新的空位图,然后在空位图中绘制或绘画像素。单击图层面板中的【创 建位图图像】按钮,创建一个新的位图,此时空位图就被添加到图层面板的当前层中。
• 在新创建的位图层中绘制选区,然后用【油漆桶】工具,选择一种颜色,填充它,即创建了一个位图区域。
第3页/共6页
通过剪切或复制创建位图对象
• 首先用【选区】工具、【套索】工具或【魔术棒】工具选择像素,单击【编辑】菜单中的【剪切】或【复 制】命令,剪切或复制完成后,单击【编辑】菜单的【粘贴】命令。
• 除了使用菜单命令外,可以用鼠标右键单击像素选区,并从快捷菜单中选择剪切或复制的命令。

网页设计与制作第13章位图图像的编辑

网页设计与制作第13章位图图像的编辑
第13章
位图图像的编辑
第13章 位图图像的编辑
学习目标:
通过本章的学习,要求掌握创建位图图像 的方法,学会编辑图像,优化、导出图像,能 够用Firesorks熟练处理图像。
第13章 位图图像的编辑
13.1创建编辑位图图像 13.2 图像效果的应用 13.3优化图像的输出
13.1创建编辑位图图像
13.3 优化图像的输出
1. 2. 3.
JPEG文件的优化 GIF文件的优化 其他格式的优化设置
1.JPEG文件的优化




JPEG总是以 24 位颜色保存和导出,它不存在调色板设置的 问题,当选择 JPEG 图像时,颜色表为空。下面具体介绍 JPEG格式中的优化设置,对应JPEG格式的优化面板如上图 所示。 预设模式:【JPEG-较高品质】和【JPEG-较小文件】。前 者导出的图像质量较高,但文件大小也更大,后者为了得到 更小的文件,而牺牲了图像的质量。 色板,决定原图中透明的区域在输出时的颜色。 品质,在【预设模式】的基础上,对图像的压缩质量做进一 步的微调。其参数的值越高,图像质量越好,对应文件也越 大。如图13-26所示,左图:品质90,文件大小50.90k;右 图:品质20,文件大小7.73k。
13.1.1 创建位图图像 13.1.2图像部分区域的选取 13.1.3编辑位图图像
13.1.1 创建位图图像
创建位图的方法很简单,可以直接选择 【导入】命令,导入一幅位图图像,也可以将 已经存在的路径对象转换成位图,或者直接利 用位图编辑工具——铅笔或刷子创建新的位图。
13.1.2图像部分区域的选.5.3节中已经介绍过利用【导出 向导】将文档输出。在本节中,我们将具体介绍如何对 图像优化后再输出。优化的目的主要是使将输出的图像 选择一种合适的压缩方式,达到即能减小文件大小,又 能兼顾图像质量的效果。 优化主要包括选择文件格式和调整图形中的颜色两个方 面。不同的图像具有不同的存储格式,每种格式都有一 组唯一的选项,所以不同格式的图像文件对应不同的优 化存储过程。

平面设计 CD第十二讲:位图的

平面设计 CD第十二讲:位图的

应用ICC引挚:使用色彩描述文件 三、改变位图颜色:位图/位图颜色遮罩 位图色彩模式:黑色模式,灰度模式,双色模式, 调色板,RGB,LAB,入:CTRL+I,文件/导入 2、导出:CTRL+E,文件/导出(JPG,BMP) 3、导入位图时编辑位图:全图像,裁剪,重新取样 4、裁切导入后的位图:便用形状工具对导入后的位图进 行裁切 5、导入一个位图:若将矢量图转化为位图则体积变大, 不能再转为矢量图 6、导入多个位图:按位CTRL/SHIFT选中多个文件 二、位图转换:使用CD不仅可以绘制矢量图形,还可以 将矢量图转换为其它类型 分辩率:分辨率越大图像越清晰 平滑处理:使位图更平滑,但是会变模糊 透明背景:不是白色,是透明色
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档