如何静态显示图片

wk5882846 2012-04-15 12:56:26
我用win32 api写了wmf格式图片的显示,
图片显示出来了。
但是是一点一点的慢慢显示完全(大概有1秒),显示完全后就没了。当我把窗口大小改变(图片显示方框就设置为窗口大小方框),也就是改变了图片显示的方框,图片就又像刚启动一样一点一点的慢慢显示完全,然后就又没了。
请问该怎么解决?
Qt有禁止背景刷新吗?
...全文
230 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
haltwang 2012-05-21
  • 打赏
  • 举报
回复
真的支持么?用哪个类来显示?求指点啊,最好内稍微带点代码,我弄了3个多月的这个问题了,用win32 api各种兼容问题啊。
[Quote=引用 7 楼 的回复:]
谁说 QT不支持wmf格式的图片。。。 我试了,完全没问题啊。 而且就算这种格式不行,你也可以用画图软件给你换个格式不就可以了。
[/Quote]
xiebin133 2012-05-21
  • 打赏
  • 举报
回复
谁说 QT不支持wmf格式的图片。。。 我试了,完全没问题啊。 而且就算这种格式不行,你也可以用画图软件给你换个格式不就可以了。
xiebin133 2012-05-21
  • 打赏
  • 举报
回复
你用QImage先加载下。
QPainter painter(this);
QImage image("./defaultbg.wmf");
painter.drawPixmap(0, 0, 1000, 800, QPixmap::fromImage(image).scaled(1000, 800));
这样试下, 在paintEvent里面画,试下行不行,反正我这边显示出来了, 我直接用QLabel setPixmap也可以。
wk5882846 2012-05-20
  • 打赏
  • 举报
回复
我要显示wmf格式的图片,但是Qt不支持,没办法只能用win32 api了
结果显示出来就出问题了。在一个子类中画会画到旁边的子类里面去。
[Quote=引用 5 楼 的回复:]
静态图片用QLabel在构造里加载吧,你这一堆看着真心不懂用意
[/Quote]
念茜 2012-05-01
  • 打赏
  • 举报
回复
静态图片用QLabel在构造里加载吧,你这一堆看着真心不懂用意
  • 打赏
  • 举报
回复
不就是静态图片吗,QLabel就行,或者自己在repaintEvent事件里画,你这样搞法不伦不类,去用VC好了
wk5882846 2012-04-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
贴上代码这个比较好吧。。。
[/Quote]
我在QWidget的PaintEvent里这样写下:
QFile file(fileName);
file.open(QIODevice::ReadOnly);
DWORD dwIsAldus;
METAHEADER mfHeader;
DWORD dwSize;
DWORD seekpos;
if(file.read((char *)&dwIsAldus, sizeof(dwIsAldus)) != sizeof(dwIsAldus))

;// return false;
if (dwIsAldus != ALDUSKEY) {
// A windows metafile, not a placeable wmf
seekpos = 0;
memset(&m_aldusMFHeader,0, sizeof(m_aldusMFHeader));
}
else {
// This is a placeable metafile
// Convert the placeable format into something that can
// be used with GDI metafile functions
file.seek(0);
if (file.read((char *)&m_aldusMFHeader, ALDUSMFHEADERSIZE) != ALDUSMFHEADERSIZE)
;// return false;
seekpos = ALDUSMFHEADERSIZE;
}
file.seek(seekpos);
if (file.read((char *)&mfHeader, sizeof(mfHeader)) != sizeof(mfHeader))
;// return false;
if ((mfHeader.mtType != 1) && (mfHeader.mtType != 2))
;// return false;
dwSize = mfHeader.mtSize * 2;
BYTE* lpMFBits = new BYTE [dwSize];
if (lpMFBits == NULL)
;// return false;
file.seek(seekpos);
if (file.read((char *)lpMFBits, dwSize) == dwSize)
{

h_emf =SetWinMetaFileBits(dwSize, lpMFBits,NULL , NULL);
QRect rect(0,0,this->width(),this->height());
PlayEnhMetaFile(this->getDC(),(HENHMETAFILE__*)h_emf,(RECT*)&rect);
//关键的一行,显示用的。
}

另外在Widget.h中有以下准备的代码:
#define ALDUSKEY 0x9AC6CDD7
#define ALDUSMFHEADERSIZE 22

typedef struct tagOLDRECT
{
short left;
short top;
short right;
short bottom;
} OLDRECT;

typedef struct {
DWORD key;
WORD hmf;
OLDRECT bbox;
WORD inch;
DWORD reserved;
WORD checksum;
} ALDUSMFHEADER;

typedef struct
{
qint16 Left;
qint16 Top;
qint16 Right;
qint16 Bottom;
} PWMFRect16;


struct WmfPlaceableFileHeader
{
UINT32 Key; // GDIP_WMF_PLACEABLEKEY
qint16 Hmf; // Metafile HANDLE number (always 0)
PWMFRect16 BoundingBox; // Coordinates in metafile units
qint16 Inch; // Number of metafile units per inch
UINT32 Reserved; // Reserved (always 0)
qint16 Checksum; // Checksum value for previous 10 WORDs
};


还有两个成员变量:
HANDLE h_emf;
ALDUSMFHEADER m_aldusMFHeader;
tt2com 2012-04-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我用win32 api写了wmf格式图片的显示,
图片显示出来了。
但是是一点一点的慢慢显示完全(大概有1秒),显示完全后就没了。当我把窗口大小改变(图片显示方框就设置为窗口大小方框),也就是改变了图片显示的方框,图片就又像刚启动一样一点一点的慢慢显示完全,然后就又没了。
请问该怎么解决?
Qt有禁止背景刷新吗?
[/Quote]
不是应该禁止刷新,而是你再改吧窗口的时候需要重绘
shen_wei 2012-04-24
  • 打赏
  • 举报
回复
贴上代码这个比较好吧。。。

16,227

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧