直接控制24位位图的象素(E)

原创 2001年08月16日 15:52:00

Directly Accessing Pixels in a 24-bit Bitmap


This article was contributed by Zvika Ben-Haim.

Environment: VC5/6, Win95+

This article describes how to display 24-bit (TrueColor) bitmaps which are created during run-time by directly accessing the bitmap's bit image.

The code in this article uses the CDib class, developed by David J. Kruglinski in his book Inside Visual C++, 4th edition. The CDib class is copyrighted by Microsoft, and can be used in your programs as long as you mention their name. The CDib class is included at the end of this document.

1. Create a CDib object, and allocate memory.

This will typically be done in CView::OnInitialUpdate, or some such. It's done in the following way:


2. Fill the bitmap data.

You now have a memory region, allocated by Windows, in which you can write the output information. This memory region is accessed from m_pDib->m_lpImage, and contains a series of three-byte (R,G,B) pixels. As an example, you can get a nice rainbow-color image using the following code:


Where we used the function doc, defined as follows (intended for bitmaps of size 512x512 pixels, more or less):


3. Display the bitmap.

From within CView::OnDraw, use the following to display the bitmap:


where m_rectDraw is a logical-coordinate rectangle defining the position in which we want to place the bitmap. The bitmap is shrunk or expanded using the StretchDIBits function so that it will fit into this rectangle.

4. Delete the DIB.

Don't forget to deallocate the CDib object when you're done. The constructor deallocates all memory associate with the DIB, including the memory of the actual image.


File: CDib.h -- CDib class header file


File: CDib.cpp -- CDib class definitions


 

32位位图与24位位图互相转换

1、32位图数据转换成24位位图数据: unsigned char* RGB32TO24(unsigned char* src, int width, int height) { uint8_t*...
  • MikeDai
  • MikeDai
  • 2017年03月13日 11:45
  • 1067

8位位图和24位位图的相互转换

8位位图转换为24位位图其实,只要从8位位图中取得一个像素的灰度值,然后去填充24位位图的三个字节就可以了,很明显,这样得到的24位位图是灰度的,就是RGB各分量是一样的值。主要的转换程序/*****...
  • poonjun
  • poonjun
  • 2009年01月04日 09:58
  • 7671

位图(Bitmap)16色,256色,24位位图表达的意思

 我们常说:Windows95/98处于16色或256色状态,它的意思是屏幕上最多能显示多少种颜色。   你看,在16色下显示黑白的文本或简单的色彩线条是非常正常的,但如果我们要想看多于16种颜色的画...
  • gwwgle
  • gwwgle
  • 2009年11月26日 16:42
  • 9618

将24位位图转换8位位图

bmpTest.h   :介绍BMP文件的格式及结构定义 bmpTest.cpp : 24bitBMP颜色数据到256色位图颜色数据的转换函数实现,具体算法可参考以 前的一个帖子 bmpTrans...
  • tiger9991
  • tiger9991
  • 2012年09月14日 22:52
  • 7568

24位位图转成8位灰度位图

  • yjn43422757
  • yjn43422757
  • 2010年04月21日 11:28
  • 4190

24位位图转8位灰度图

bool ImageReader::depthfrom24to8(char *newimageName) { //以二进制写的方式打开文件 FILE *fp=fopen(newimageName,"...
  • u014568921
  • u014568921
  • 2015年09月11日 14:15
  • 1834

8位位图转换为24位位图

8位位图转换为24位位图 其实,只要从8位位图中取得一个像素的灰度值,然后去填充24位位图的三个字节就可以了,很明显,这样得到的24位位图是灰度的,就是RGB各分量是一样的值。 主要的转换...
  • shejiannan
  • shejiannan
  • 2015年07月09日 15:26
  • 1392

8位位图转换成24位位图

8位位图与24位位图的区别就在于8位的有调色板,而24位的没有。调色板信息是按(BGRA)顺序存放的,每4位是一个调色板项,共有256个调色板,故只能显示256种颜色,其中A始终为0。位图数据区则是存...
  • shejiannan
  • shejiannan
  • 2015年07月09日 15:28
  • 1416

使用GDI+实现24 位图转32位位图

  今天利用修改图像的alpha通道实现了图像的倒影,但是在对图像进行测试的时候,发现24位的位图不能实现倒影,究其原因是24位以下的图像没有alpha通道,也就没办法利用修改alpha通道的方式去实...
  • jingzhongyuezhiqiyi
  • jingzhongyuezhiqiyi
  • 2011年04月27日 15:44
  • 710

【数字图像】C++8位和24位BMP位图的平滑、锐化、二值化处理,以及24位真彩图的灰度化

由于8位和24位BMP的像素存储方式不同,所以不能用相同的函数对位图进行处理,因此我设计了两个类分别处理8位和24位BMP。 程序运行时,首先提示输入位图深度。 然后输入位图名称。 程序会...
  • White_Idiot
  • White_Idiot
  • 2016年06月30日 23:53
  • 4491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:直接控制24位位图的象素(E)
举报原因:
原因补充:

(最多只允许输入30个字)