ubuntu下codeblocks起步(九)-中

ubuntu下codeblocks起步(九)-bmp位图

下面的程序实现了对位图的基本操作,程序的功能很简单,就是将窗体中的内容保存为一个位图。实现此功能的方法有很多,这里用的是最基本的方法,即对该窗体的每个像素点进行处理,获得它们的颜色值并写入到已创建的bmp文件中。

在上一篇中介绍了bmp位图文件的格式,写入位图文件可以大体上分为下面几步:

1、创建空的bmp位图文件;

2、打开此位图文件;

3、写入bmp文件头信息;

4、通过循环写入每个像素点的颜色值;

5、关闭文件。

为了体现这种方法与直接保存图片不文件的不同,程序中还有一个保存图片为位图文件的例子。它与直接处理像素点的程序相比要简单的多。我们知道,bmp文件是windows下的位图文件。如果要在linux下用就要自己定义响应的文件头信息的结构体。在这里,我们将结构体作为类的成员变量定义在头文件中。可以参见上一篇文章来了解相应的结构体。


新建一个wxwidgets的frame工程。

修改窗体的菜单项,添加“位图”和“像素”两个菜单。如下:

头文件修改如下(红色为添加的内容):

/***************************************************************

* Name: OSImageMain.h

* Purpose: Defines Application Frame

* Author: ()

* Created: 2007-10-23

* Copyright: ()

* License:

**************************************************************/


#ifndef OSIMAGEMAIN_H

#define OSIMAGEMAIN_H


//(*Headers(OSImageFrame)

#include <wx/frame.h>

#include <wx/menu.h>

#include <wx/statusbr.h>

//*)

#include <wx/file.h>

#include <wx/bitmap.h>


//bitmap structor

#define BYTE unsigned char

#define DWORD unsigned int

#define LONG int

#define UINT unsigned int

#define WORD unsigned short int

#define LPSTR char*

#define BOOL int

#define FALSE 0

#define TRUE 1



class OSImageFrame: public wxFrame

{

public:


OSImageFrame(wxWindow* parent,wxWindowID id = -1);

virtual ~OSImageFrame();

private:

wxString OFileName;

wxBitmap m_bmp;

wxBitmap bmp ;

int height,width;


private:

// MS-Windows bitmaps' definition:

#pragma pack(push,2)


typedef struct tagBITMAPFILEHEADER

{

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

} BITMAPFILEHEADER;


typedef struct tagBITMAPINFOHEADER

{

DWORD biSize;

LONG biWidth;

LONG biHeight;

WORD biPlanes;

WORD biBitCount;

DWORD biCompression;

DWORD biSizeImage;

LONG biXPelsPerMeter;

LONG biYPelsPerMeter;

DWORD biClrUsed;

DWORD biClrImportant;

} BITMAPINFOHEADER;


typedef struct tagRGBQUAD

{

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

} RGBQUAD;


typedef struct tagBITMAPINFO

{

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

} BITMAPINFO;


#pragma pack(pop) // 还原


private:

RGBQUAD m_BMPRgbQuad;

BITMAPINFOHEADER m_BMPInfoHeader;

BITMAPINFO m_BMPInfo;

BITMAPFILEHEADER m_BMPHeader;


FILE* fp; //定义文件指针

public:

struct MyPixel //颜色结构体

{//注意这些域的类型,

public:

BYTE b; //代表blue

BYTE g; //代表green

BYTE r; //代表red

};

MyPixel c1; //定义了一个象素点的结构


private:


//(*Handlers(OSImageFrame)

void OnQuit(wxCommandEvent& event);

void OnAbout(wxCommandEvent& event);

void OnMenuItem3Selected(wxCommandEvent& event);

void OnPaint(wxPaintEvent& event);

void OnMenuItem6Selected(wxCommandEvent& event);

void OnMenuItem4Selected(wxCommandEvent& event);

void OnMenuItem5Selected(wxCommandEvent& event);

//*)

//(*Identifiers(OSImageFrame)

static const long idMenuQuit;

static const long idMenuOpen;

static const long idMenuPSave;

static const long idMenuDraw;

static const long idMenuBSave;

static const long idMenuAbout;

static const long ID_STATUSBAR1;

//*)


//(*Declarations(OSImageFrame)

wxMenu* Menu3;

wxMenuItem* MenuItem3;

wxMenuItem* MenuItem4;

wxMenuItem* MenuItem5;

wxStatusBar* StatusBar1;

//*)


DECLARE_EVENT_TABLE()

};


#endif // OSIMAGEMAIN_H


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值