文档库 最新最全的文档下载
当前位置:文档库 › bitmap

bitmap

bitmap
bitmap

位图

位图图像(bitmap), 亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可

以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大

位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位

图图像的颜色和形状又显得是连续的。

在体检时,工作人员会给你一个本子,在这个本子上有一些图像,而图像都是由一个个的点组成的,这和位图图像其实是差不多的。由于每一个像素都是单独染色的,您可以通过以每次一个像素的频率操作选择区域而产生近似相片的逼真效果,诸如加深阴影和加重颜色。缩小位图尺寸也会使原图变形,因为此举是通过减少像素来使整个图像变小的。同样,由于位图图像是以排列的像素集合体形式创建的,所以不能单独操作(如移动)局部位图。一般情况下,位图是工具拍摄后得到的。如数码相机拍摄的照片.

分辨率是一个笼统的术语,它指一个图像文件中包含的细节和信息的大小,以及输入、输出、或显示设备能够产生的细节程度。操作位图时,分辨率既会影响最后输出的质量也会影响文件的大小。处理位图需要三思而后行,因为给图像选择的分辨率通常在整个过程中都伴随着文件。无论是在一个300 dpi的打印机还是在一个2570dpi的照排设备上印刷位图文件,文件总是以创建图像时所设的分辨率大小印刷,除非打印机的分辨率低于图像的分辨率。如果希望最终输出看起来和屏幕上显示的一样,那么在开始工作前,就需要了解图像的分辨率和不同设备分辨率之间的关系。显然矢量图就不必考虑这

RGB

位图颜色的一种编码方法,用红、绿、蓝三原色的光学强度来表示一种颜色。这是最常见的位图编码方法,可以直接用于屏幕显示。

CMYK

位图颜色的一种编码方法,用青、品红、黄、黑四种颜料含量来表示一种颜色。常用的位图编码方法之一,可以直接用于彩色印刷。

编辑本段位图图像属性

索引颜色/颜色表

位图常用的一种压缩方法。从位图图片中选择最有代表性的若干种颜色(通常不超过256种)编制成颜色表,然后将图片中原有颜色用颜色表的索

位图BITMAPINFOHEADER 与BITMAPFILEHEADER 先来看BITMAPINFOHEADER,只写几个主要的

biSize包含的是这个结构体的大小(包括颜色表)

biWidth和biHeight分别是图片的长宽

biPlanes是目标绘图设备包含的层数,必须设置为1

biBitCount是图像的位数,例如24位,8位等

biXPelsPerMeter,biYPelsPerMeter 是现实世界中每米包含的像素数设为3780即可

biSizeImage 图像数据的大小= biWidth X biHeight X biBitCount

---------------------------------------------------------------------------------

再看BITMAPFILEHEADER

bfType 图片的类型必须是BM 填0x4d42即十进制的19778

bfOffBits 从文件头开始到颜色数据的偏移量 54+sizeof(RGBQUAD)*256

bfSize 图片的大小,bfOffBits + 长X 宽X 位数例如对于128X128X24位的图像 bfSize=128X128 X24 + 54+sizeof(RGBQUAD)*256

bfReserved1和bfReserved1必须为0

BMP文件结构

如图1所示,BMP图像文件被分成4个部分:位图文件头(Bitmap File Header)、位图信息头(Bitma p Info Header)、颜色表(Color Map)和位图数据(即图像数据,Data Bits或Data Body)。

第1部分为位图文件头BITMAPFILEHEADER,是一个结构体类型,该结构的长度是固定的,为14个字节。其定义如下:

typedef struct tagBITMAPFILEHEADER

{

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER,

*PBITMAPFILEHEADER;

BITMAPFILEHEADER结构的各个域详细说明如下:

bfType:位图文件类型,必须是0x424D,即字符串“BM”,也就是说,所有的“*.bmp”文件的头两个字节都是“BM”。

bfSize:位图文件大小,包括这14个字节。

bfReserved1, bfReserved2:Windows保留字,暂不用。

bfOffBits:从文件头到实际的位图数据的偏移字节数,图1中前3个部分的长度之和。

第2部分为位图信息头BITMAPINFOHEADER,也是一个结构体类型的数据结构,该结构的长度也是固定的,为40个字节(WORD为无符号16位整数,DWORD为无符号32位整数,LONG为32位整数)。其定义如下:

typedef struct tagBITMAPINFOHEADER

{

DWORD biSize;

LONG biWidth;

LONG biHeight;

WORD biPlanes;

WORD biBitCount

DWORD biCompression;

DWORD biSizeImage;

LONG biXPelsPerMeter;

LONG biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER,

*PBITMAPINFOHEADER;

BITMAPINFOHEADER结构的各个域的详细说明如下:

biSize:本结构的长度,为40个字节。

biWidth:位图的宽度,以像素为单位。

biHeight:位图的高度,以像素为单位。

biPlanes:目标设备的级别,必须是1。

biBitCount:每个像素所占的位数(bit),其值必须为1(黑白图像)、4(16色图)、8(256色)、24(真彩色图),新的BMP格式支持32位色。

biCompresssion:位图压缩类型,有效的值为BI_RGB(未经压缩)、BI_RLE8、BI_RLE4、BI_BITFILE DS(均为Windows定义常量)。这里只讨论未经压缩的情况,即biCompression=BI_RGB。

biSizeImage:实际的位图数据占用的字节数,该值的大小在第4部分位图数据中有具体解释。

biXPelsPerMeter:指定目标设备的水平分辨率,单位是像素/米。

biYPelsPerMeter:指定目标设备的垂直分辨率,单位是像素/米。

biClrUsed:位图实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次幂。biClrImportant:位图显示过程中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。

第3部分为颜色表。颜色表实际上是一个RGBQUAD结构的数组,数组的长度由biClrUsed指定(如果该值为零,则由biBitCount指定,即2的biBitCount次幂个元素)。RGBQUAD结构是一个结构体类型,占4个字节,其定义如下:

typedef struct tagRGBQUAD

{

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

}RGBQUAD;

RGBQUAD结构的各个域的详细说明如下:

rgbBlue:该颜色的蓝色分量;

rgbGreen:该颜色的绿色分量;

rgbRed:该颜色的红色分量;

rgbReserved:保留字节,暂不用。

有些位图需要颜色表;有些位图(如真彩色图)则不需要颜色表,颜色表的长度由BITMAPINFOHEADE R结构中biBitCount分量决定。对于biBitCount值为1的二值图像,每像素占1bit,图像中只有两种(如黑白)颜色,颜色表也就有21=2个表项,整个颜色表的大小为个字节;对于biBitCount值为8的灰度图像,每像素占8bit,图像中有颜色,颜色表也就有256个表项,且每个表项的R、G、B分量相等,整个颜色表的大小为个字节;而对于biBitCount=24的真彩色图像,由于每像素3个字节中分别代表了R、G、B三分量的值,此时不需要颜色表,因此真彩色图的BITMAPINFOHEADER结构后面直接就是位图数据。

第4部分是位图数据,即图像数据,其紧跟在位图文件头、位图信息头和颜色表(如果有颜色表的话)之后,记录了图像的每一个像素值。对于有颜色表的位图,位图数据就是该像素颜色在调色板中的索引值;对于真彩色图,位图数据就是实际的R、G、B值(三个分量的存储顺序是B、G、R)。下面分别就2色、16色、256色和真彩色位图的位图数据进行说明:

对于2色位图,用1位就可以表示该像素的颜色,所以1个字节能存储8个像素的颜色值。

对于16色位图,用4位可以表示一个像素的颜色。所以一个字节可以存储2个像素的颜色值。

对于256色位图,1个字节刚好存储1个像素的颜色值。

对于真彩色位图,3个字节才能表示1个像素的颜色值。

需要注意两点:

第一,Windows规定一个扫描行所占的字节数必须是4的倍数,不足4的倍数则要对其进行扩充。假设图像的宽为biWidth个像素、每像素biBitCount个比特,其一个扫描行所占的真实字节数的计算公式如下:

DataSizePerLine = (biWidth * biBitCount /8+ 3) / 4*4

那么,不压缩情况下位图数据的大小(BITMAPINFOHEADER结构中的biSizeImage成员)计算如下:biSizeImage = DataSizePerLine * biHeight

第二,一般来说,BMP文件的数据是从图像的左下角开始逐行扫描图像的,即从下到上、从左到右,将图像的像素值一一记录下来,因此图像坐标零点在图像左下角。

用Android OpenGL画Bitmap的方法

用Android OpenGL画Bitmap的方法 Haiyong Lei 用OpenGL API画BITMAP,BITMAP的W、H须为2的倍数,比如32、64、512。注意代码里的Vertices和Texture的坐标顺序。 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; import android.opengl.GLUtils; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; public class MainActivity extends AppCompatActivity { Bitmap bitmap = null; class BitmapRender implements Renderer { /* the border of bitmap V3 ------ V4 | | | | | | V1 ------ V2 */ float borderVerticesCoord[] = {

bitmapformat

Windows位图和调色板 吕凤军 1.Bmp文件格式 bmp文件大体上分成四个部分,如图1所示。 图1. Windows位图文件结构示意图 第一部分为位图文件头BITMAPFILEHEADER,是一个结构,其定义如下: typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; 这个结构的长度是固定的,为14个字节(WORD为无符号16位整数,DWORD为无符号32位整数),各个域的说明如下: bfType 指定文件类型,必须是0x424D,即字符串”BM”,也就是说所有.bmp文件的头两个字节都是”BM” bfSize 指定文件大小,包括这14个字节 bfReserved1,bfReserved2 为保留字,不用考虑 bfOffBits 为从文件头到实际的位图数据的偏移字节数,即图1中前三个部分的长度之和。 第二部分为位图信息头BITMAPINFOHEADER,也是一个结构,其定义如下: typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage;

LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER; 这个结构的长度是固定的,为40个字节(WORD为无符号16位整数,DWORD无符号32位整数,LONG为32位整数),各个域的说明如下: biSize 指定这个结构的长度,为40 biWidth 指定图象的宽度,单位是象素 biHeight 指定图象的高度,单位是象素 biPlanes 必须是1,不用考虑 biBitCount 指定表示颜色时要用到的位数,常用的值为1(黑白二色图), 4(16色图), 8(256色), 24(真彩色图)(新的.bmp格式支持32位色,这里就不做讨论了)。 biCompression 指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS(都是一些Windows定义好的常量)。要说明的是,Windows位图可以采用RLE4,和RLE8的压缩格式,但用的不多。我们今后所讨论的只有第一种不压缩的情况,即biCompression为BI_RGB的情况。 biSizeImage 指定实际的位图数据占用的字节数,其实也可以从以下的公式中计算出来:biSizeImage=biWidth’ * biHeight 要注意的是:上述公式中的biWidth’必须是4的整倍数(所以不是biWidth,而是biWidth’,表示大于或等于biWidth的,离4最近的整倍数。举个例子,如果biWidth=240,则biWidth’=240;如果biWidth=241,biWidth’=244) 如果biCompression为BI_RGB,则该项可能为零 biXPelsPerMeter 指定目标设备的水平分辨率,单位是每米的象素个数,关于分辨率的概念,我们将在打印部分详细介绍。 biYPelsPerMeter 指定目标设备的垂直分辨率,单位同上。 biClrUsed 指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次方。 biClrImportant 指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。 第三部分为调色板(Palette),当然,这里是对那些需要调色板的位图文件而言的。有些位图,如真彩色图,前面已经讲过,是不需要调色板的,BITMAPINFOHEADER后直接是位图数据。 调色板实际上是一个数组,共有biClrUsed个元素(如果该值为零,则有2的biBitCount 次方个元素)。数组中每个元素的类型是一个RGBQUAD结构,占4个字节,其定义如下:typedef struct tagRGBQUAD { BYTE rgbBlue; //该颜色的蓝色分量 BYTE rgbGreen; //该颜色的绿色分量 BYTE rgbRed; //该颜色的红色分量 BYTE rgbReserved; //保留值 } RGBQUAD; 第四部分就是实际的图象数据了。对于用到调色板的位图,图象数据就是该像素颜在调色板中的索引值,对于真彩色图,图象数据就是实际的R,G,B值。下面就2色,16色,256色位图和真彩色位图分别介绍。 对于2色位图,用1位就可以表示该像素的颜色(一般0表示黑,1表示白),所以一个字节可以表示8个像素。 对于16色位图,用4位可以表示一个像素的颜色,所以一个字节可以表示2个像素。

位图结构详细资料

GDI基本概念及思想 编写代码的一般步骤:先用CreateDC创建(或GetDC获取)device content(DC),然后用GetObject获取(或使用创建object的函数创建)需要的object,并用SelectObject将获取的object选入device content(DC),再使用object进行相应的画图操作,最后用SelectObject将原来的object重新选入DC,并delete 或release删除或释放前面创建或获取的DC。 1.关于device context (DC)设备内容:用来显示位图的地方. 四种设备内容:显示器设备内容、打印机设备内容、内存设备内容、Information 设备内容,常用的有显示器DC和内存DC. Device Context Types: There are four types of DCs: display, printer, memory (or compatible), and information. Device context Description Display Supports drawing operations on a video display. Printer Supports drawing operations on a printer or plotter. Memory Supports drawing operations on a bitmap. Information Supports the retrieval of device data. 其中需要注意的一种类型是:Memory Device Contexts,将在bitmap处理中详细介绍。 创建和获取DC的相关函数: CreateDC,CreateCompatibleDC,GetDC,GetCurrentDC. 其中CreateCompatibleDC用于创建内存设备内容. 刷新、释放和删除DC的相关函数: ResetDC,ReleaseDC,DeleteDC.前者当DC有变动时用来重置DC,后者用来释放使用万完的DC. DeleteDC与CreateDC对应使用 ReleaseDC与GetDC对应使用 2.关于graphical object(GDI objects): 包括:pen,brush,bitmap,palette,region,path. 获取、选择和删除object的相关函数:

LoadBitmap位图加载

#include LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow) { static TCHAR szAppName[]=TEXT("Bricks1"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style=CS_HREDRAW|CS_VREDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=szAppName;

if(!RegisterClass(&wndclass)) { MessageBox(NULL,TEXT("This program requires Windows NT!"), szAppName,MB_ICONERROR); return0; } hwnd=CreateWindow(szAppName,TEXT("LoadBitmap Demo"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); }

瀑布流waterfall的使用以及Bitmap图像优化原理总结

瀑布流waterfall的使用以及Bitmap图像优化原理总结 Android的Bitmap图像优化的原文链接: Android的Bitmap图像优化的译文链接: 瀑布流的功能实现目标: 1.瀑布流,可简单配置显示列数。 2.下拉刷新 3.上拉加载更多 实现瀑布流的代码目录: 1、要实现这种特殊的瀑布流布局界面,要自定义个View,自定义View的包:huewu.pla.lib MutiColumnListView ----自定义的瀑布流View PLA_ListView ------MutiColumnListView的父类,主要是对瀑布流的显示的方法。

PLA_AbsListView -----PLA_ListView 的父类,是自定义listview的基类,对绑定数据进行处理。 PLA_AdapterView----自定义View的是数据适配器, PLA_AbsListView 的父类。 PLA_HeaderViewListAdapter ----- 自定义View的头布局和尾布局的适配器,在PLA_AbsListView用到。 2、要实现上拉下拉功能,需要对MutiColumnListView进行重写,把头尾和各种手势处理加上:me.maxwin.view XListView-----对MutiColumnListView进行重写,把头尾和各种手势处理加上,项目中直接用到的类。 XListViewFooter-----添加的尾布局。 XListViewHeader-----添加的头布局。 3、这里瀑布流加载的是网络图片,图片下载显示工具包: com.example.android.bitmapfun.util bitmapfun是google教程提供的工具包,是对图片的异步加载、缓存的工具,使用很简单,就一个方法把图片url和imageview控件传进去就可以。其显现逻辑感兴趣的可以学一下。 4、由于瀑布流图片显示的自动调整宽高,就要对imageview进行重写:com/dodowaterfall/widget/ScaleImageView.java widget包里的另外还有两个自定义View不知道干啥使得,项目中也没用到,暂时先不管了。 5、工具包和自定义view准备好,调用自己界面显示瀑布流: com/huewu/pla/sample/PullToRefreshSampleActivity.java 图片数据显示首先通过网络获得图片的数据,图片数据的实体类包:com.dodola.model 再按照实现流程分析下,瀑布流功能的实现逻辑:

android 优化Bitmap

Android 优化Bitmap避免OutOfMemoryError 使用android提供的BitmapFactory解码图片时,往往会因为图片过大而遇到OutOfMemoryError的异常。要想正常使用,一种简便的方式是分配更少的内存空间来存储,即在载入图片的时候以牺牲图片质量为代价,将图片进行放缩,这是一种避免OOM所采用的解决方法。但是,这种方法是得不偿失的,牺牲了图片质量。 在BitmapFactory中有一个内部类BitmapFactory.Options,其中值得我们注意的是inSampleSize和inJustDecodeBounds两个属性: inSampleSize是以2的指数的倒数被进行放缩 If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. (1 -> decodes full size; 2 -> decodes 1/4th size; 4 -> decode 1/16th size). Because you rarely need to show and have full size bitmap images on your phone. For manipulations smaller sizes are usually enough. inJustDecodeBounds为Boolean型 设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即options.outWidth和options.outHeight。 要对图片进行缩放,最大的问题就是怎么在运行时动态的改变inSampleSize的值,通过上面的inJustDecodeBounds可以知道图片原始的大小,那么这样以来就可以通过算法来得到一个恰当的inSampleSize值。其动态算法可参考下面的,网上也很多,大体都一样: /** * compute Sample Size * * @param options * @param minSideLength * @param maxNumOfPixels * @return */ public static int computeSampleSize(BitmapFactory.Options options, int minSideLength,int maxNumOfPixels) {

浅谈Android中Bitmap的使用

浅谈Android中Bitmap的使用 (仅供内部使用)

修订记录

目录 1案例描述 (2) 2案例分析 (2) 3解决过程 (2) 3.1 高效的载入大图片 (2) 3.1.1获取图片尺寸和类型 (3) 3.1.2载入缩小版本的图片至内存 (3) 3.2在UI线程外操作Bitmap (5) 3.2.1使用AsyncTask后台获取数据 (6) 3.3 使用缓存 (7) 3.3.1使用内存缓存 (8) 3.3.2 使用磁盘缓存 (11) 3.3.3 处理参数改变 (15) 3.4 在UI中显示Bitmap (16) 3.4.1 向ViewPager中显示图片 (17) 4总结 (22) 5附录 (23)

关键词: Android,Bitmap,缓存, 内存不足,并行 摘要: 本案例首先介绍了在Android中使用Bitmap经常会碰到的问题。接着引出了在Android中高效的使用Bitmap的几种方法:抽样图片,并行获取图片和使用缓存。通过学习本案例,可以使读者对Android中Bitmap的使用有一个更深的认知。

1案例描述 在android中使用bitmap,一个不小心,你有可能就会让bitmap消耗掉你应用中的所有可用内存从而导致那个让人纠结的异常: https://www.wendangku.net/doc/c52634032.html,ng.outOfMemory: bitmap size exceeds the VM budget. 本案例讲解了在android中使用Bitmap时用到的几种技术。通过学习案例中介绍的几种方法,不但可以使你尽量的避免上述异常,同时,使你的UI流畅性,用户体验得到很大的提高。 2案例分析 在你的应用中,要小心翼翼的使用Bitmap的原因有很多: 1.移动设备自身硬件的限制。在android稳定性文档中(Android Compatibility Definitely Docenment)的3.7节中有定义不同屏幕大小和密度下android应用可分配的最少内存。最少时,一个android应用只能分配到16M的内存。你必须在这种少量内存下最大化的优化你的应用; 2.Bitmap自身比较耗费内存,尤其使用高质量的图片时。例如,在Galaxy Nexus下,拍取一 张照片,这张照片通常有2592x1936个像素点。如果对这张照片使用ARGB_8888个格式生成bitmap,那么将会消耗掉大约19M的内存(2592*1936*4),完全超过了某些小内存设备的应用最小内存设置(这还仅仅是一张图); 3.android控件会频繁的要求应用载入B i tmap。例如,ListView,GridView和ViewPager通常 会在当前的屏幕下显示多个Bitmap,还有很多Bitmap将要被显示在屏幕上,只需等待你“小指一挥”,这些Bitmap就要立刻显示在屏幕上。 只有高效的使用bitmap,才能使你的应用高效的运行。 Note:Android Compatibility Definitely Document是google发布的针对android设备硬软件开发商的android平台稳定性定义文档。 3解决过程 3.1 高效的载入大图片 图片的大小,形状各不相同。在很多情况下,它们会比你的UI组件大的多。如在系统相册中显示的使用你的照相机拍的照片的分辨率其实要比你的屏幕密度大的多。

WPF中使用BitmapImage处理图片文件

WPF中使用BitmapImage处理图片文件 WPF中使用BitmapImage处理图片文件 分类:WPF technology2010-12-10 16:452122人阅读评论(0)收藏举报 wpfimage (1)图片从文件导入 BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new Uri(filename); image.EndInit(); (2)图片从Binary导入 //已知Binary binary MemoryStream ms = new MemoryStream(binary.ToArray()); BitmapImage image = new BitmapImage(); image.BeginInit(); image.StreamSource = ms; image.EndInit();

(3)保存图片文件 //已知BitmapImage image JpegBitmapEncoder encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(image)); FileStream fileStream = new FileStream(imageFileName, FileMode.Create, FileAccess.ReadWrite); encoder.Save(fileStream); fileStream.Close(); (4)图片应用到材质 //已知BitmapImage image ImageBrush imageBrush = new ImageBrush(image); DiffuseMaterial material = new DiffuseMaterial(); material.Brush = imageBrush; 分享到: 上一篇:WPF中实现图片文件转换成Visual对象,Viewport3D

c#Bitmap与c++ Mat 相互转换

C#Bitmap和C++ opencv Mat相互转换C#调用C++编译成的dll,这个dll中包含Opencv个的Mat到c#的Bitmap 转换,具体代码如下: C++部分: 首先创建win32应用程序,选择类库模板 DLL_API uchar * _stdcall run1(char* filename, int&width, int&height, int&step) { IplImage* uu = cvLoadImage(filename); IplImage* dst1 = cvCreateImage(cvSize(uu->width, uu->height), 8, 1); cvCvtColor(uu, dst1, CV_RGB2GRAY); Mat ss = cvarrToMat(uu); uchar * data = new uchar[uu->width*uu->height * 3]; data = ss.data; width = ss.size().width; height = ss.size().height; step = ss.step; return data; } C#中调用这个dll [DllImport(@"E:\Files\BarcodeProject\Code\testCode\OpenCvAssemblies\Debug\OpenC vAssemblies.dll")] publicstaticextern IntPtr run1(string a, outint width, outint height, outint step); 至此完成C++ Mat到Bitmap的转换 下面是Bitmap 到 Mat的转换 C# 部分 publicstatic BitmapInfo GetImagePixel(Bitmap Source) { byte[] result; int step; int iWidth = Source.Width; int iHeight = Source.Height; Rectangle rect = new Rectangle(0, 0, iWidth, iHeight); System.Drawing.Imaging.BitmapData bmpData = Source.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, Source.PixelFormat); IntPtr iPtr = bmpData.Scan0; int iBytes = iWidth * iHeight * 3; //根据通道数进行设置 byte[] PixelValues = newbyte[iBytes];

CBitmap HBITMAP BITMAP

CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); dcCompatible.SelectObject(&bitmap); CRect rect; GetClientRect(&rect); //pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCO PY); pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible, 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); //上述是直接将bmp图片生成VC的资源位图ID为IDB_BITMAP1,再获取位图贴在dc dcCompatible上 //以下是把静态gif格式的图片从文件转换成程序里面的vc6里面的CBitMap 或HBITMAP对象 HANDLE LoadAnImage( LPCTSTR FileName ) { // Use IPicture stuff to use JPG / GIF files IPicture* p; IStream* s; HGLOBAL hG; void* pp; FILE* fp; if (FileName == NULL || _tcscmp(FileName, " ") == 0) return NULL; // Read file in memory fp = fopen(FileName, "rb "); if (!fp) return NULL; fseek(fp,0,SEEK_END); int fs = ftell(fp); fseek(fp,0,SEEK_SET);

C# Bitmap类

Bitmap 类 .NET Framework 4 其他版本 此主题尚未评级- 评价此主题 封装GDI+ 位图,此位图由图形图像及其特性的像素数据组成。Bitmap 是用于处理由像素数据定义的图像的对象。 继承层次结构 System.Object System.MarshalByRefObject System.Drawing.Image System.Drawing.Bitmap 命名空间:System.Drawing 程序集:System.Drawing(在System.Drawing.dll 中) 语法 C# C++ F# VB 复制 [SerializableAttribute] [ComVisibleAttribute(true)] publicsealedclass Bitmap : Image Bitmap 类型公开以下成员。 构造函数 名称说明 Bitmap(Image)从指定的现有图像初始化Bitmap 类的新 实例。 Bitmap(Stream)从指定的数据流初始化Bitmap 类的新实 例。

Bitmap(String)从指定的文件初始化Bitmap 类的新实 例。 Bitmap(Image, Size)从指定的现有图像(缩放到指定大小)初 始化Bitmap 类的新实例。 Bitmap(Int32, Int32)用指定的大小初始化Bitmap 类的新实 例。 Bitmap(Stream, Boolean)从指定的数据流初始化Bitmap 类的新实 例。 Bitmap(String, Boolean)从指定的文件初始化Bitmap 类的新实 例。 Bitmap(Type, String)从指定的资源初始化Bitmap 类的新实 例。 Bitmap(Image, Int32, Int32)从指定的现有图像(缩放到指定大小)初 始化Bitmap 类的新实例。 Bitmap(Int32, Int32, Graphics)用指定的大小和指定的Graphics对象的分 辨率初始化Bitmap 类的新实例。 Bitmap(Int32, Int32, PixelFormat)用指定的大小和格式初始化Bitmap 类的新实例。 Bitmap(Int32, Int32, Int32, PixelFormat, IntPtr)用指定的大小、像素格式和像素数据初始化Bitmap 类的新实例。 页首属性

很详细的bitmap图象格式详解!

Bitmaps should be saved in a file that uses the established bitmap file format and assigned a name with the three-character .bmp extension. The established bitmap file format consists of a BITMAPFILEHEADER structure followed by a BITMAPINFOHEADER, BITMAPV4HEADER, or BITMAPV5HEADER structure. An array of RGBQUAD structures (also called a color table) follows the bitmap information header structure. The color table is followed by a second array of indexes into the color table (the actual bitmap data). The bitmap file format is shown in the following illustration. Windows 95, Windows NT 4.0: Replace the BITMAPINFOHEADER structure with the BITMAPV4HEADER structure. Windows 98/Me, Windows 2000/XP: Replace the BITMAPINFOHEADER structure with the BITMAPV5HEADER structure. The members of the BITMAPFILEHEADER structure identify the file; specify the size of the file, in bytes; and specify the offset from the first byte in the header to the first byte of bitmap data. The members of the BITMAPINFOHEADER, BITMAPV4HEADER, or BITMAPV5HEADER structure specify the width and height of the bitmap, in pixels; the color format (count of color planes and color bits-per-pixel) of the display device on which the bitmap was created; whether the bitmap data was compressed before storage and the type of compression used; the number of bytes of bitmap data; the resolution of the display device on which the bitmap was created; and the number of colors represented in the data. The RGBQUAD structures specify the RGB intensity values for each of the colors in the device's palette. The color-index array associates a color, in the form of an index to an RGBQUAD structure, with each pixel in a bitmap. Thus, the number of bits in the color-index array equals the number of pixels times the number of bits needed to index the RGBQUAD structures. For example, an 8x8 black-and-white bitmap has a color-index array of 8 * 8 * 1 = 64 bits, because one bit is needed to index two colors. The Redbrick.bmp, mentioned in About Bitmaps, is a 32x32 bitmap with 16 colors; its color-index array is 32 * 32 * 4 = 4096 bits because four bits index 16 colors. To create a color-index array for a top-down bitmap, start at the top line in the bitmap. The index of the RGBQUAD for the color of the left-most pixel is the first n bits in the color-index array (where n is the number of bits needed to indicate all of the RGBQUAD structures). The color of the next pixel to the right is the next n bits in the array, and so forth. After you reach the right-most pixel in the line, continue with the left-most pixel in the line below. Continue until you finish with the entire bitmap. If it is a bottom-up bitmap, start at the bottom line of the bitmap instead of the top line, still going from left to right, and continue to the top line of the bitmap.

C# Bitmap 占用资源不释放解决方案

///

///缩小图片 /// ///源图文件名(绝对路径) ///目标宽度(允许的最大宽度) ///新图片质量(1-100) public void ResizePic(string strPath, int newWidth, int quality) { Bitmap bmOld, bmNew; try { //读取原图片 bmOld = new Bitmap(strPath); //为了解决Bitmap不释放资源问题,先不同的名称保存图片,缩放完后把临时文件删除 string tempPath = strPath.Replace(".", "_temp."); int oldWidth = bmOld.Width; int oldHeight = bmOld.Height; int newHeight = (int)((double)newWidth / oldWidth * oldHeight); if (oldWidth < newWidth) { newWidth = oldWidth; newHeight = oldHeight; } //建立新Bitmap用于缩放图片 bmNew = new Bitmap(bmOld, newWidth, newHeight); //保存缩放后的图片 bmNew.Save(tempPath); bmOld.Dispose(); bmNew.Dispose(); //获取图片Encoder信息 ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo ici = null; foreach (ImageCodecInfo codec in codecs) { if (codec.MimeType == "image/jpeg") ici = codec; } EncoderParameters ep = new EncoderParameters(); //给定的参数quality ep.Param[0] = new EncoderParameter(Encoder.Quality, (long)quality); //从临时文件中读取图片

Bitmap特效,被风吹散效果

Bitmap特效,被风吹散效果。 详细代码: 1.p ackage 2. 3.{ 4. 5.i mport flash.display.Bitmap; 6. 7.i mport flash.display.BitmapData; 8. 9.i mport flash.display.MovieClip; 10. 11.import flash.display.Sprite; 12. 13.import flash.events.Event; 14. 15.import flash.filters.BlurFilter; 16. 17.import flash.geom.Point; 18. 19.import flash.geom.Rectangle; 20. 21. 22. 23./** 24.

25.* ... 26. 27.* @author flashk 28. 29.*/ 30. 31.public class Min extends Sprite 32. 33.{ 34. 35.public var a_mc:MovieClip; 36. 37. 38. 39.private var bd:BitmapData; 40. 41.private var bds:BitmapData; 42. 43.private var ps:Array; 44. 45. 46. 47.public function Min() { 48. 49.bd = new BitmapData(1420, 300, true); 50. 51.bds = new BitmapData(a_mc.width, a_mc.height, true); 52.

CStatic 控件绘制BITMAP的方法

CStatic 控件绘制BITMAP的方法 方法一: CStatic * pStatic = (CStatic *)GetDlgItem(IDC_STABITMAP); HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRES OURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION); pStatic->ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE); // 修改 CStatic的样式, 这一步很重要 pStatic->SetBitmap(hBitmap); 方法二: CStatic * pStatic = (CStatic *)GetDlgItem(IDC_STABITMAP); HBITMAP hBitmap; hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0, LR_CREATEDIBSECTIO N); pStatic->ModifyStyle(0, BS_OWNERDRAW); // 修改CStatic样式,改成自绘制,这 一步很重要 CRect rc; pStatic->GetClientRect(&rc); BITMAP bm; HDC hdcImage = CreateCompatibleDC(NULL); // 创建兼容DC SelectObject(hdcImage, hBitmap); // 将加载进来的位图句柄选入兼容DC GetObject(hBitmap, sizeof(bm), &bm); // 将位图信息填入BITMAP结构体 StretchBlt(pStatic->GetDC()->GetSafeHdc(),rc.left,rc.top,rc.Width(),rc.He ight(),hdcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); // 拷贝位图到 CStatic

相关文档