知道宽度高度以及颜色数组,如何显示出来? 知道宽度 高度 和每个象素的颜色数据 ,请问怎么显示出来?我的方法是一个个调用SetPixel打点,太慢了能够有什么办法一次吧所有象素显示出来吗 谢谢在线等待 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把这些写到Bitmap里面 然后显示bitmap 把这些写到Bitmap里面 然后显示bitmap什么意思?写道CBitmap里吗 可以直接把颜色数据数组赋给CBitmap吗? 其实就是想问通过这些知道的数据 怎么构建CBitmap 是CreateBitmap吗? SetBitmapBits好像这个函数可以 但为什么我显示出来的只有黑白两色呢 一定要把颜色表写入bitmapinfo 除非是24位或32位彩色图象 是24位图象我是在OnDraw里这样写的 ,为什么出来的图象不对 ,应该是个全红的图片啊?MapWidth = 100;MapHeight = 100;typedef struct{ unsigned char B; unsigned char G; unsigned char R;}CColorData;CColorData * pArray = new CColorData[MAX_WIDTH*MAX_HEIGHT];for (int k=0; k<MapWidth*MapHeight; k++){ pArray[k].R = 255; pArray[k].G = 0; pArray[k].B = 0;}CDC MemDC;HBITMAP OldBitmap;MemDC.CreateCompatibleDC(pDC);CBitmap bitmap;bitmap.CreateCompatibleBitmap(pDC, MapWidth, MapHeight);bitmap.SetBitmapBits(3*MapWidth*MapHeight, pBits);HBITMAP hBitmap = (HBITMAP)bitmap;OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);pDC->BitBlt(0, 0, MapWidth, MapHeight, &MemDC, 0, 0, SRCCOPY);MemDC.SelectObject(OldBitmap);delete [] pBits;出来的图象完全不是红色的 ,怎么回事啊? bm2=new CBitmap;bm2->CreateBitmap (cx,cy,1,bitspixel,pBuff);bitspixel一般为32,pBuff为数组4字节 bitmap还应该加BITMAPINFO头信息的吧 用CreateDIBSection可以创建一个可以直接写的位图,然后把它画到客户区。大概写了一下,希望对你有帮助。#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)void CDrawcolorView::OnDrawColor() { // TODO: Add your command handler code here HDC hDC=::GetDC(this->m_hWnd); CRect rect; GetClientRect(&rect); rect.right=WIDTHBYTES(rect.right*8); BITMAPINFO bi; void *pBits=NULL; int nWidth=rect.right; int nHeight=rect.bottom; //写位图文件头 ZeroMemory(&bi,sizeof(bi)); bi.bmiHeader.biSize=sizeof(bi.bmiHeader); bi.bmiHeader.biHeight=nHeight; bi.bmiHeader.biWidth=nWidth; bi.bmiHeader.biPlanes=1; bi.bmiHeader.biBitCount=24; bi.bmiHeader.biCompression=BI_RGB; bi.bmiHeader.biSizeImage=3*nWidth*nHeight; HDC hBmpDC=CreateCompatibleDC(hDC); //创建一个可以直接写入的位图对像 HBITMAP hBitmap=CreateDIBSection(hDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0); SelectObject(hBmpDC,hBitmap); //将每个像素赋成红色 BYTE* pSrc=(BYTE*)pBits; for(int i=0;i<nHeight;i++) { for(int j=0;j<nWidth;j++) { pSrc[i*nWidth*3+j*3]=0x00; pSrc[i*nWidth*3+j*3+1]=0x00; pSrc[i*nWidth*3+j*3+2]=0xff; } } //复制位图到前台 BitBlt(hDC,0,0,nWidth,nHeight,hBmpDC,0,0,SRCCOPY); DeleteDC(hBmpDC); DeleteObject(hBitmap); ::ReleaseDC(this->m_hWnd,hDC);} 窗口类设置背景为灰色运行时却显示白色 怎么实现任意形状图形的截取? MFC中有一个疑惑 C++中的奇怪用法 cdialogbar 大小刷新问题 编译出错了,帮忙看下 对话框显示bitmap 在动态库中还能调用com组件啊?我调用老是失败 怎样获得网页中指定的内容? 迷惑不解,请教了 福建的程序员请进! 怎么样 调用exe!例如在一个小对话框内设置一个按钮,按下去调用一个exe呢?请教高手!对不起分不多了! 在自己定义的函数中,当完成这个函数退出时报错。能帮我看看吗?
怎么构建CBitmap 是CreateBitmap吗?
但为什么我显示出来的只有黑白两色呢
MapHeight = 100;typedef struct{
unsigned char B;
unsigned char G;
unsigned char R;
}CColorData;CColorData * pArray = new CColorData[MAX_WIDTH*MAX_HEIGHT];for (int k=0; k<MapWidth*MapHeight; k++)
{
pArray[k].R = 255;
pArray[k].G = 0;
pArray[k].B = 0;
}
CDC MemDC;
HBITMAP OldBitmap;
MemDC.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(pDC, MapWidth, MapHeight);
bitmap.SetBitmapBits(3*MapWidth*MapHeight, pBits);
HBITMAP hBitmap = (HBITMAP)bitmap;
OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
pDC->BitBlt(0, 0, MapWidth, MapHeight, &MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(OldBitmap);
delete [] pBits;
出来的图象完全不是红色的 ,怎么回事啊?
bm2->CreateBitmap (cx,cy,1,bitspixel,pBuff);bitspixel一般为32,pBuff为数组4字节
{
// TODO: Add your command handler code here
HDC hDC=::GetDC(this->m_hWnd); CRect rect;
GetClientRect(&rect);
rect.right=WIDTHBYTES(rect.right*8); BITMAPINFO bi;
void *pBits=NULL; int nWidth=rect.right;
int nHeight=rect.bottom; //写位图文件头
ZeroMemory(&bi,sizeof(bi));
bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
bi.bmiHeader.biHeight=nHeight;
bi.bmiHeader.biWidth=nWidth;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
bi.bmiHeader.biSizeImage=3*nWidth*nHeight; HDC hBmpDC=CreateCompatibleDC(hDC);
//创建一个可以直接写入的位图对像
HBITMAP hBitmap=CreateDIBSection(hDC,&bi,DIB_RGB_COLORS,&pBits,NULL,0);
SelectObject(hBmpDC,hBitmap); //将每个像素赋成红色
BYTE* pSrc=(BYTE*)pBits;
for(int i=0;i<nHeight;i++)
{
for(int j=0;j<nWidth;j++)
{
pSrc[i*nWidth*3+j*3]=0x00;
pSrc[i*nWidth*3+j*3+1]=0x00;
pSrc[i*nWidth*3+j*3+2]=0xff;
}
}
//复制位图到前台
BitBlt(hDC,0,0,nWidth,nHeight,hBmpDC,0,0,SRCCOPY); DeleteDC(hBmpDC);
DeleteObject(hBitmap);
::ReleaseDC(this->m_hWnd,hDC);
}