我把控件的属性的Center Image选中了,各位高手帮我解决
13 个解决方案
#1
CDC* temp=GetDC();
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
#2
CDC* temp=GetDC();
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
#3
CDC* temp=GetDC();
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
#4
用gdiplus 很好用的。
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
LPCTSTR filename1=filename.GetBuffer(filename.GetLength());
WCHAR filename2[512];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCTSTR)filename1, -1,filename2 , 512);
Image tmpImage(filename2);
graphics.DrawImage(&tmpImage, destRect);//你可以任意設置destRect。
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
LPCTSTR filename1=filename.GetBuffer(filename.GetLength());
WCHAR filename2[512];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCTSTR)filename1, -1,filename2 , 512);
Image tmpImage(filename2);
graphics.DrawImage(&tmpImage, destRect);//你可以任意設置destRect。
#5
你获取的设备上下文有问题
并且最好把图片作为资源来载入
并且最好把图片作为资源来载入
#6
用GDIPlus:
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
Image tmpImage(L"filename");
graphics.DrawImage(&tmpImage, destRect);
很好用的。
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
Image tmpImage(L"filename");
graphics.DrawImage(&tmpImage, destRect);
很好用的。
#7
位图的调入没那么简单吧,除非你现在资源中加入位图,如果像读文件那样调入,我用了一个类(CDib),很多位图处理都用它,其中的读文件函数是
BOOL CDib::Read(CFile* pFile)
{
// 1. read file header to get size of info hdr + color table
// 2. read info hdr (to get image size) and color table
// 3. read image
// can't use bfSize in file header
// 清除DIB
Empty();
int nCount, nSize;
BITMAPFILEHEADER bmfh;
// 尝试读取BMP文件
try
{
// 读BMP文件头
nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
// 判断读取文件头的大小是否
if(nCount != sizeof(BITMAPFILEHEADER))
{
// 读文件出错
throw new CException;
}
// 判断是否是"BM"
if(bmfh.bfType != 0x4d42)
{
// 不是BMP文件,抛出异常
throw new CException;
}
nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
m_nBmihAlloc = m_nImageAlloc = crtAlloc;
nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
ComputeMetrics();
ComputePaletteSize(m_lpBMIH->biBitCount);
MakePalette();
m_lpImage = (LPBYTE) new char[m_dwSizeImage];//此处读出位图数据
nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
}
catch(CException* pe)
{
AfxMessageBox("Read error");
pe->Delete();
return FALSE;
}
return TRUE;
}
然后在自己程序的view 中:
void CDemo_ViewDibView::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,"bmp","*.bmp");
if(dlg.DoModal ()!=IDOK)
return ;
CFile file;
file.Open (dlg.GetPathName (),CFile::modeRead);
if (m_DibObject.Read (&file)==TRUE)//m_DibObject 是我在view 中定义的指向CDib的成员变量
{
Invalidate();
}
至于拉伸显示你的函数是对的!
我也是搞图像的,有空联系;frankcai2002@sina.com.cn
BOOL CDib::Read(CFile* pFile)
{
// 1. read file header to get size of info hdr + color table
// 2. read info hdr (to get image size) and color table
// 3. read image
// can't use bfSize in file header
// 清除DIB
Empty();
int nCount, nSize;
BITMAPFILEHEADER bmfh;
// 尝试读取BMP文件
try
{
// 读BMP文件头
nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
// 判断读取文件头的大小是否
if(nCount != sizeof(BITMAPFILEHEADER))
{
// 读文件出错
throw new CException;
}
// 判断是否是"BM"
if(bmfh.bfType != 0x4d42)
{
// 不是BMP文件,抛出异常
throw new CException;
}
nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
m_nBmihAlloc = m_nImageAlloc = crtAlloc;
nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
ComputeMetrics();
ComputePaletteSize(m_lpBMIH->biBitCount);
MakePalette();
m_lpImage = (LPBYTE) new char[m_dwSizeImage];//此处读出位图数据
nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
}
catch(CException* pe)
{
AfxMessageBox("Read error");
pe->Delete();
return FALSE;
}
return TRUE;
}
然后在自己程序的view 中:
void CDemo_ViewDibView::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,"bmp","*.bmp");
if(dlg.DoModal ()!=IDOK)
return ;
CFile file;
file.Open (dlg.GetPathName (),CFile::modeRead);
if (m_DibObject.Read (&file)==TRUE)//m_DibObject 是我在view 中定义的指向CDib的成员变量
{
Invalidate();
}
至于拉伸显示你的函数是对的!
我也是搞图像的,有空联系;frankcai2002@sina.com.cn
#8
'Graphics' : undeclared identifier
呵呵,如何声明?谢谢
呵呵,如何声明?谢谢
#9
#include "gdiplus.h"
using namespace Gdiplus;
using namespace Gdiplus;
#10
你可能需要安裝 Gdiplus.
絕對是值得的,處理圖像非常方便。
絕對是值得的,處理圖像非常方便。
#11
不用LoadBitMap,用LoadImage。就可以拉伸位图。
#12
感谢各位的帮忙,我已经解决,还是我原来的方法,
frankcai_2001(Frank) 说的很对,这样调入图象要求作为资源文件,但是可以在程序运行的过程中动态改变对应的文件,所以还是可以实现。
再次感谢各位的帮忙。
frankcai_2001(Frank) 说的很对,这样调入图象要求作为资源文件,但是可以在程序运行的过程中动态改变对应的文件,所以还是可以实现。
再次感谢各位的帮忙。
#13
dc->SetStretchBltMode(COLORONCOLOR);
而且用上面的语句可以使拉伸后的图像显示效果比较好
而且用上面的语句可以使拉伸后的图像显示效果比较好
#1
CDC* temp=GetDC();
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
#2
CDC* temp=GetDC();
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
#3
CDC* temp=GetDC();
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
CDC* dc=GetDC();
CDC mydc;
CBitmap bit;
bit.LoadBitmap("d:\\1.bmp");
mydc.CreateCompatibleDC(temp);
mydc.SelectObject(&bit);
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);
上边是代码,但是我搞不清楚为什么调不进这个bmp图,
dc->StretchBlt(1,1,400,400,temp,1,1,726,886,SRCCOPY);这一句绘制的总是屏幕上显示的内容,不知道错在哪里了。
大家帮帮忙,急啊!
#4
用gdiplus 很好用的。
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
LPCTSTR filename1=filename.GetBuffer(filename.GetLength());
WCHAR filename2[512];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCTSTR)filename1, -1,filename2 , 512);
Image tmpImage(filename2);
graphics.DrawImage(&tmpImage, destRect);//你可以任意設置destRect。
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
LPCTSTR filename1=filename.GetBuffer(filename.GetLength());
WCHAR filename2[512];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (LPCTSTR)filename1, -1,filename2 , 512);
Image tmpImage(filename2);
graphics.DrawImage(&tmpImage, destRect);//你可以任意設置destRect。
#5
你获取的设备上下文有问题
并且最好把图片作为资源来载入
并且最好把图片作为资源来载入
#6
用GDIPlus:
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
Image tmpImage(L"filename");
graphics.DrawImage(&tmpImage, destRect);
很好用的。
HDC hdc=::GetDC(m_hWnd);
Graphics graphics(hdc);
Image tmpImage(L"filename");
graphics.DrawImage(&tmpImage, destRect);
很好用的。
#7
位图的调入没那么简单吧,除非你现在资源中加入位图,如果像读文件那样调入,我用了一个类(CDib),很多位图处理都用它,其中的读文件函数是
BOOL CDib::Read(CFile* pFile)
{
// 1. read file header to get size of info hdr + color table
// 2. read info hdr (to get image size) and color table
// 3. read image
// can't use bfSize in file header
// 清除DIB
Empty();
int nCount, nSize;
BITMAPFILEHEADER bmfh;
// 尝试读取BMP文件
try
{
// 读BMP文件头
nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
// 判断读取文件头的大小是否
if(nCount != sizeof(BITMAPFILEHEADER))
{
// 读文件出错
throw new CException;
}
// 判断是否是"BM"
if(bmfh.bfType != 0x4d42)
{
// 不是BMP文件,抛出异常
throw new CException;
}
nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
m_nBmihAlloc = m_nImageAlloc = crtAlloc;
nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
ComputeMetrics();
ComputePaletteSize(m_lpBMIH->biBitCount);
MakePalette();
m_lpImage = (LPBYTE) new char[m_dwSizeImage];//此处读出位图数据
nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
}
catch(CException* pe)
{
AfxMessageBox("Read error");
pe->Delete();
return FALSE;
}
return TRUE;
}
然后在自己程序的view 中:
void CDemo_ViewDibView::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,"bmp","*.bmp");
if(dlg.DoModal ()!=IDOK)
return ;
CFile file;
file.Open (dlg.GetPathName (),CFile::modeRead);
if (m_DibObject.Read (&file)==TRUE)//m_DibObject 是我在view 中定义的指向CDib的成员变量
{
Invalidate();
}
至于拉伸显示你的函数是对的!
我也是搞图像的,有空联系;frankcai2002@sina.com.cn
BOOL CDib::Read(CFile* pFile)
{
// 1. read file header to get size of info hdr + color table
// 2. read info hdr (to get image size) and color table
// 3. read image
// can't use bfSize in file header
// 清除DIB
Empty();
int nCount, nSize;
BITMAPFILEHEADER bmfh;
// 尝试读取BMP文件
try
{
// 读BMP文件头
nCount = pFile->Read((LPVOID) &bmfh, sizeof(BITMAPFILEHEADER));
// 判断读取文件头的大小是否
if(nCount != sizeof(BITMAPFILEHEADER))
{
// 读文件出错
throw new CException;
}
// 判断是否是"BM"
if(bmfh.bfType != 0x4d42)
{
// 不是BMP文件,抛出异常
throw new CException;
}
nSize = bmfh.bfOffBits - sizeof(BITMAPFILEHEADER);
m_lpBMIH = (LPBITMAPINFOHEADER) new char[nSize];
m_nBmihAlloc = m_nImageAlloc = crtAlloc;
nCount = pFile->Read(m_lpBMIH, nSize); // info hdr & color table
ComputeMetrics();
ComputePaletteSize(m_lpBMIH->biBitCount);
MakePalette();
m_lpImage = (LPBYTE) new char[m_dwSizeImage];//此处读出位图数据
nCount = pFile->Read(m_lpImage, m_dwSizeImage); // image only
}
catch(CException* pe)
{
AfxMessageBox("Read error");
pe->Delete();
return FALSE;
}
return TRUE;
}
然后在自己程序的view 中:
void CDemo_ViewDibView::OnFileOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,"bmp","*.bmp");
if(dlg.DoModal ()!=IDOK)
return ;
CFile file;
file.Open (dlg.GetPathName (),CFile::modeRead);
if (m_DibObject.Read (&file)==TRUE)//m_DibObject 是我在view 中定义的指向CDib的成员变量
{
Invalidate();
}
至于拉伸显示你的函数是对的!
我也是搞图像的,有空联系;frankcai2002@sina.com.cn
#8
'Graphics' : undeclared identifier
呵呵,如何声明?谢谢
呵呵,如何声明?谢谢
#9
#include "gdiplus.h"
using namespace Gdiplus;
using namespace Gdiplus;
#10
你可能需要安裝 Gdiplus.
絕對是值得的,處理圖像非常方便。
絕對是值得的,處理圖像非常方便。
#11
不用LoadBitMap,用LoadImage。就可以拉伸位图。
#12
感谢各位的帮忙,我已经解决,还是我原来的方法,
frankcai_2001(Frank) 说的很对,这样调入图象要求作为资源文件,但是可以在程序运行的过程中动态改变对应的文件,所以还是可以实现。
再次感谢各位的帮忙。
frankcai_2001(Frank) 说的很对,这样调入图象要求作为资源文件,但是可以在程序运行的过程中动态改变对应的文件,所以还是可以实现。
再次感谢各位的帮忙。
#13
dc->SetStretchBltMode(COLORONCOLOR);
而且用上面的语句可以使拉伸后的图像显示效果比较好
而且用上面的语句可以使拉伸后的图像显示效果比较好