关于位图显示!!
我在我的工程中添加了一个位图资源,该资源是我从一幅分辨率较高的.jpg 图片里拷过去的,,可是我显示出来的图像只有简单的几种颜色,,请问这是怎么回事?应该怎么样解决? 问题点数:20、回复次数:15Top
1 楼Featured(我握着爱情的门票静静排队……)回复于 2005-06-03 22:06:24 得分 5
你不要通过资源,可以直接加载外部图片。
BMP图片可以通过如下代码加载:
CDC MemDC;
CString str("f:\\ascii.bmp");
HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CBitmap *pBitmap = new CBitmap;
pBitmap->Attach(hBitmap);
MemDC.CreateCompatibleDC(pDC);
MemDC.SelectObject(pBitmap);
pDC->BitBlt(0, 0,800, 800, &MemDC, 0, 0, SRCCOPY);
Top
2 楼zzm7000()回复于 2005-06-03 22:11:08 得分 0
添加的位图资源默认比特深度只有4,也就是说只是16色的。你可以把jpg直接加到项目里,但是需要知道你准备拿图像干什么Top
3 楼Hendy_So(横笛)回复于 2005-06-03 22:13:51 得分 0
VC的资源管理器只支持最高256色位图。Top
4 楼psbeond(LibUIDK界面库客服)回复于 2005-06-04 00:22:18 得分 0
VC能直接支持jpg吗?应该不行吧,如果是jpg的话,用GDI+加载
Top
5 楼erwinlyj(littlebaby)回复于 2005-06-04 00:39:43 得分 5
bmp可以在vc中调用和显示,
但是jpg要处理,这两钟冬冬的数据结构是不一样的
请你参考这个:
VC数字图像处理编程讲座
http://purec.binghua.com/Article/Class6/Class23/200412/392.html
我现在做的一个程序调用bmp文件是这样调用的:
在窗口的OnCreat()里面初始化数据:
mdc = new CDC;
char ch[10]; //载入图片组1
for(int i=0;i<=9;i++)
{
sprintf( ch , "b%d.bmp" , i );
bitmap[i] = new CBitmap ;
bitmap[i]->m_hObject = (HBITMAP)::LoadImage(NULL, ch ,IMAGE_BITMAP,Tel1Width,Tel1Heigh,LR_LOADFROMFILE);
}
mdc->CreateCompatibleDC(&dc);
mdc->SelectObject(bitmap);//Tel1Width,Tel1Heigh为图片的分辨率,我前面用const定义过了的,你查查LoadImage()参数说明就知道了;
在::OnPaint()
{
CPaintDC dc(this);
Draw(&dc);
}
void CChildwinWnd::Draw(CDC *dc)
{
for(int i=0;i<=9;i++)
{
mdc->SelectObject(bitmap[i]);
dc->BitBlt(Tel1DistanceX,Tel1DistanceY,Tel1Width,Tel1Heigh,mdc,0,0,SRCCOPY);
,0,0,SRCCOPY);
}
}
附:Draw()在头文件中的定义
void Draw( CDC *pdc );
Top
6 楼tianzxy(月亮雨)回复于 2005-06-04 10:46:56 得分 0
我就是想把文档的背脊设成一副比较好看的清楚的图,不想用打开外部的位图!Top
7 楼allenhiman(9Ft)回复于 2005-06-04 10:56:24 得分 5
//也许这样最简单,而且你能看明白
void YourView::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class
CBitmap bmp;
bmp.LoadBitmap(IDB_XXXX);
CBrush m_brush;
m_brush.CreatePatternBrush(&bmp);
CRect rect( 0, 0, 2000, 2000);
pDC->FillRect(rect, &m_brush);
m_brush.DeleteObject();
bmp.DeleteObject();
}Top
8 楼tianzxy(月亮雨)回复于 2005-06-04 11:13:48 得分 0
我本来就是象楼上那位allenhiman(YadWe) 那样做的,,
效果太差了,,有没有好的办法?Top
9 楼allenhiman(9Ft)回复于 2005-06-04 12:06:06 得分 0
楼上几位说的都不错啊
不过2楼的代码由资源和内存泄露的嫌疑
Top
10 楼sunshine13870840(雀弹)回复于 2005-06-04 17:25:46 得分 5
vc可以加载JPG图形,就看你想加载干什么?
如果显示只有256色,加在对话框的空间上用,
CWnd*p=GetDlgItem(IDC_ss);
CDC *pDC=new CDC;
CDC mdc;
mdc.CreeatecompatibleDC(pDC);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
mdc.slectObject(&bitmap);
pDC->Bitblt(0,0,100,100,&mdc,SRCCOPY);
如果加在对话框可以用SetWindowPos()来设置位置Top
11 楼o1n(小毛子)回复于 2005-06-04 22:24:05 得分 0
用PictureEx类可以直接加jpg和gif 格式的动画Top
12 楼gauss(Powered-by-Internet)回复于 2005-06-04 22:40:10 得分 0
问题出在你拷过去上面,VC6支持各种格式(包括真彩色)的BMP,但只能显示最高256色的BMP。
你可以把JPG保存成BMP,然后Import进资源里面。Top
13 楼tianzxy(月亮雨)回复于 2005-06-06 20:56:04 得分 0
如果高于256色怎么办呢?有办法吗?Top
14 楼t12345678(才鸟)回复于 2005-06-07 10:55:41 得分 0
学习!Top
15 楼tianzxy(月亮雨)回复于 2005-06-19 18:09:07 得分 0
?Top




