新人问个 picture control 的使用

wmmj23 2010-05-04 10:05:52
我想用一个按键实现打开当地的一个.bmp文件
还想用一个按键实现保存选择地址的.bmp文件

请问这两个按键怎么实现呢?
...全文
327 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
theplayerwuliang 2010-05-06
  • 打赏
  • 举报
回复
或者用OpenCV实现
wmmj23 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 visualeleven 的回复:]
或者将PICTURE 控件关联一个CStatic对象,通过CStatic::SetBitmap()来设置位图。。。
[/Quote]我有个程序是手动选择图片位置的,怎么预设.bmp文件名然后实现,自动加载本地的预设名的。bmp文件
wmmj23 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
CFileDialog类,还有lz问题问的方式很另类,标题和所问问题不符。。。
[/Quote]


另类?就是通过Button来让picture control显示图片啊

有没有具体的方法?
lsupper 2010-05-04
  • 打赏
  • 举报
回复
用CFileDialog类获取文件后,构造出HBITMAP后,setbitmap~~~~
Eleven 2010-05-04
  • 打赏
  • 举报
回复
CFileDialog类,还有lz问题问的方式很另类,标题和所问问题不符。。。
Eleven 2010-05-04
  • 打赏
  • 举报
回复
或者将PICTURE 控件关联一个CStatic对象,通过CStatic::SetBitmap()来设置位图。。。
Eleven 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wmmj23 的回复:]
引用 1 楼 visualeleven 的回复:
CFileDialog类,还有lz问题问的方式很另类,标题和所问问题不符。。。



另类?就是通过Button来让picture control显示图片啊

有没有具体的方法?
[/Quote]
LoadImage加载图片,然后就BitBlt/StretchBlt()贴图嘛。。。
尹成 2010-05-04
  • 打赏
  • 举报
回复
在按钮事件里写上:
Unit1.h

  typedef   struct{                                       //文件头   
short int bfType;
int bfSize;
short int bfReserved1;
short int bfReserved2;
int bfoffBits;
} FILEHEADER;
typedef struct { //信息头
long biSize;
long biWidth;
long biHeight;
short int biPlanes;
short int biBitCount;
long biCompress;
long biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
long biClrUsed;
long biClrImportant;
}INFOHEADER;
typedef struct { //调色板
unsigned char rgbBlue;
unsigned char rgbGreen;
unsigned char rgbRed;
unsigned char rgbReserved;
}rgbquad;
typedef struct { //存灰度值
int m;
int n;
char huidu;
bool flag;
}huiduzhi;

private:
FILEHEADER fileheader1;
INFOHEADER infoheader1;
rgbquad rgbquad[256];
huiduzhi huiduzhi1[1000][1000];



Unit.cpp

void __fastcall TForm1::Open1Click(TObject *Sender)
{
String filename;
FILE *fp;
int x,y;
BYTE *hang;

OpenDialog1->DefaultExt="BMP";
OpenDialog1->FileName="*.bmp";
OpenDialog1->Execute();
filename=OpenDialog1->FileName;
CurrentFile=OpenDialog1->FileName;
Form3->Caption=CurrentFile;
if((fp=fopen(filename.c_str(),"rb"))==NULL)
{
ShowMessage("不能打开文件");
fclose(fp);
}
else
{
int j,k;
j=sizeof(INFOHEADER);
k=sizeof(rgbquad);

fseek(fp,0L,0);
fread(&fileheader1.bfType,2,1,fp);

fseek(fp,2L,0);
fread(&fileheader1.bfSize,4,1,fp);

fseek(fp,6L,0);
fread(&fileheader1.bfReserved1,2,1,fp);

fseek(fp,8L,0);
fread(&fileheader1.bfReserved2,2,1,fp);

fseek(fp,10L,0);
fread(&fileheader1.bfoffBits,4,1,fp);

fread(&infoheader1,j,1,fp);

fread(rgbquad,k*256,1,fp);

Bitmap = new Graphics::TBitmap();
Bitmap->Width = infoheader1.biWidth;
Bitmap->Height = infoheader1.biHeight;
Image1->Picture->Graphic = Bitmap;
Form1->Height =(Bitmap->Height)+27;
Form1->Width=(Bitmap->Width)+8;

hang=new BYTE [infoheader1.biWidth];
if(hang==NULL)
{
ShowMessage("开辟空间不成功!");
}
fseek(fp,fileheader1.bfoffBits,0);
for(y=infoheader1.biHeight;y>=0;y--)
{

fread(hang,1,infoheader1.biWidth,fp);
for(x=0;x<=infoheader1.biWidth;x++)
{
huiduzhi1[x][y].m=x;
huiduzhi1[x][y].n=y;
huiduzhi1[x][y].huidu=hang[x];
huiduzhi1[x][y].flag=false;
Image1->Canvas->Pixels[x][y]=TColor(RGB(rgbquad[hang[x]].rgbRed,rgbquad[hang[x]].rgbGreen,rgbquad[hang[x]].rgbBlue));
}
fclose(fp);
free(hang);
}
}
xiuxianshen 2010-05-04
  • 打赏
  • 举报
回复
应该是通过获取键盘信息来刷新控件图像吧
你在网上搜搜获取键盘信息和picture control显示图片就可以了啊

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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