如何能够得到要显示的图片的相关数据? RT,小弟想写一个图片的显示的程序,但是小弟接触MFC时日尚浅,求各位好心人能够指点一下,要显示的文件名为1.bmp,绝对路径为"C:\Documents and Settings\1.bmp",如何获得我想要的图片的长,宽?求赐教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加载到bitmap里面,获取属性就可以了,可以看看msdn这个类的介绍 CBitmap mp;mp.loadbitmap(id);bitmap bmp;bmp.getbitmap(&mp);就可以从bmp里面获取相关属性了 我调用了,但是在mp中无法返回值啊? mp.bmHeight,mp.bmWidth;都无法返回值。编译还行,但是如果运行就会死掉。 CBitmap bitmap; bitmap.LoadBitmap(file); BITMAP bm;// bitmap.GetObject(sizeof(BITMAP),&bm); bitmap.GetBitmap(&bm); int m = bm.bmHeight; int n = bm.bmWidth;我是这么写的,不知道对不对? 运行一到 int m = bm.bmHeight;这一行就死掉了。编译没有问题。 这个加载没错,但是加载之后我们还需要显示,这里调用下GDI的bitblt,或者stretchblt就可以再界面上画图了 看下这里,可能有你需要的http://bbs.csdn.net/topics/254704 问题已解决,用的如下方法,在网上找的:#include <stdio.h> #include <malloc.h> #include <stdlib.h> #include <iostream> using namespace std; /*位图信息头BITMAPINFOHEADER,这个结构的长度是固定的,为40个字节其定义如下:*/ typedef struct tagBITMAPINFOHEADER { unsigned long biSize; /*指定这个结构的长度,为40*/ long biWidth; /*指定图象的宽度,单位是象素*/ long biHeight; /*指定图象的高度,单位是象素*/ unsigned short biPlanes; /*必须是1,不用考虑*/ unsigned short biBitCount; /*指定表示颜色时要用到的位数,常用的值为1(黑白二色图),4(16色图),8(256色),24(真彩色图)*/ unsigned long biCompression; /*指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS*/ unsigned long biSizeImage; /*指定实际的位图数据占用的字节数*/ long biXpolsPerMeter; /*指定目标设备的水平分辨率,单位是每米的象素个数。*/ long biYpelsPerMeter; /*指定目标设备的垂直分辨率,单位同上。*/ unsigned long biClrUsed; /*指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次方。*/ unsigned long biClrImportant; /*指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。*/ }BITMAPINFOHEADER; void main() { BITMAPINFOHEADER bitmapinfoheader; FILE * stream; memset(&bitmapinfoheader,0,sizeof(BITMAPINFOHEADER)); stream=fopen("E:\\3.bmp","r"); fseek(stream,14,1); fread((char*)&bitmapinfoheader,sizeof(BITMAPINFOHEADER),1,stream); fclose(stream); cout<<bitmapinfoheader.biHeight<<endl; cout<<bitmapinfoheader.biWidth<<endl; } 希望能做参考。 GDI效率问题:DrawText调用1万次,慢的要命 对话框中图象显示重绘问题 在哪儿设置Debug输出的路径? SendMessagetimeout WM_SETTINGCHANGE,有人用过没,具体怎样用? XP切换用户,程序运行实例问题 想做一个简单的动作代理外挂,有些地方不明白,请教一下高手们. 如何重绘对话框的边框啊?我没办法了? 有那位大侠用过wincrypt.h?为什么我在使用其定义的宏和函数时总说我没有定义? 求助 关于ShellExecute函数 在ListCtrl中如何实现只显示前20条记录? 求资料,虚拟打印技术,将word转换图片 MFC txt文件写入
mp.loadbitmap(id);
bitmap bmp;
bmp.getbitmap(&mp);
就可以从bmp里面获取相关属性了
mp中无法返回值啊? mp.bmHeight,mp.bmWidth;都无法返回值。
编译还行,但是如果运行就会死掉。
bitmap.LoadBitmap(file);
BITMAP bm;
// bitmap.GetObject(sizeof(BITMAP),&bm);
bitmap.GetBitmap(&bm);
int m = bm.bmHeight;
int n = bm.bmWidth;
我是这么写的,不知道对不对? 运行一到
int m = bm.bmHeight;
这一行就死掉了。编译没有问题。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
/*位图信息头BITMAPINFOHEADER,这个结构的长度是固定的,为40个字节其定义如下:*/
typedef struct tagBITMAPINFOHEADER
{
unsigned long biSize; /*指定这个结构的长度,为40*/
long biWidth; /*指定图象的宽度,单位是象素*/
long biHeight; /*指定图象的高度,单位是象素*/
unsigned short biPlanes; /*必须是1,不用考虑*/
unsigned short biBitCount; /*指定表示颜色时要用到的位数,常用的值为1(黑白二色图),4(16色图),8(256色),24(真彩色图)*/
unsigned long biCompression; /*指定位图是否压缩,有效的值为BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS*/
unsigned long biSizeImage; /*指定实际的位图数据占用的字节数*/
long biXpolsPerMeter; /*指定目标设备的水平分辨率,单位是每米的象素个数。*/
long biYpelsPerMeter; /*指定目标设备的垂直分辨率,单位同上。*/
unsigned long biClrUsed; /*指定本图象实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次方。*/
unsigned long biClrImportant; /*指定本图象中重要的颜色数,如果该值为零,则认为所有的颜色都是重要的。*/
}BITMAPINFOHEADER; void main()
{
BITMAPINFOHEADER bitmapinfoheader;
FILE * stream;
memset(&bitmapinfoheader,0,sizeof(BITMAPINFOHEADER));
stream=fopen("E:\\3.bmp","r");
fseek(stream,14,1);
fread((char*)&bitmapinfoheader,sizeof(BITMAPINFOHEADER),1,stream);
fclose(stream);
cout<<bitmapinfoheader.biHeight<<endl;
cout<<bitmapinfoheader.biWidth<<endl;
} 希望能做参考。