请教各位大虾高手:如何将TC下绘制的图形以BMP的格式保存下来?在线急等!!!

wzhen001 2004-06-14 07:48:49
该程序为绘制分形Mandelbrot集图形的C程序,在TC2.0下运行的,效果还是很不错的,如何添加一段代码能将绘制的图形以BMP的格式保存下来?急盼高手解决这一令我头疼不已的大难题!!
#include "math.h";
#include "graphics.h";

int k,kmax=25,R=4,Mx=640,My=480,dp,dq;
float pe=0.75,ps=-2.25,qe=1.5,qs=-1.5,r,p,q,x0,y0,x1,y1,x2;
void main()
{
int driver,mode;
driver=DETECT;
mode=0;
initgraph(&driver,&mode," ");
setbkcolor(0);

p=(pe-ps)/Mx;
q=(qe-qs)/My;
for(dp=1;dp<=Mx;dp++)
for(dq=1;dq<=My;dq++)
{
x0=ps+dp*p;
y0=qs+dq*q;
x1=0;y1=0;k=0;
r=(x1*x1+y1*y1);
while(r<R && k<kmax)
{
x2=x1*x1-y1*y1+x0;
y1=2*x1*y1+y0;
x1=x2;
r=(x1*x1+y1*y1);
k++;
}
if(k<kmax)
putpixel(dp,dq,k%15+1);
}
getch();
closegraph();
}
我试着添加了几次代码都不成功,盼望大虾们鼎力相助!!!
...全文
163 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
smile_toy 2004-06-15
  • 打赏
  • 举报
回复
占个位子以后再学
wzhen001 2004-06-15
  • 打赏
  • 举报
回复
感谢各位高手了,我先试一试,定会不错的!
idontlikenickname 2004-06-15
  • 打赏
  • 举报
回复


法一:
添加bmp代码,保存成bmp文件。注意tc下绘制的图像最多16色。
法二:
全屏模式下PrintScreen键或窗口模式下Alt+PrintScreen,然后打开画板粘贴,可能有颜色失真。

applebomb 2004-06-15
  • 打赏
  • 举报
回复
存16色BMP呀?
把显示16色BMP图片的程序反过来写就对了:)
注意putpixel要写成getpixel

antijpn 2004-06-14
  • 打赏
  • 举报
回复
这个好像不是很好写,主要是bmp文件的头有点复杂,有个颜色映射的东西,要慢慢调,而且还有各种格式的问题,特别是16bit色的文件,三原色分占的位数量不一样,搞不好文件就是打不开
xianfeihong 2004-06-14
  • 打赏
  • 举报
回复
给你一个显示BMP的代码。反过来就可以写成BMP文件。
// openimagefileView.cpp : implementation of the COpenimagefileView class
//

#include "stdafx.h"
#include "openimagefile.h"
#include "openimagefileDoc.h"
#include "openimagefileView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COpenimagefileView

IMPLEMENT_DYNCREATE(COpenimagefileView, CView)

BEGIN_MESSAGE_MAP(COpenimagefileView, CView)
//{{AFX_MSG_MAP(COpenimagefileView)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COpenimagefileView construction/destruction

COpenimagefileView::COpenimagefileView()
{
// TODO: add construction code here

}

COpenimagefileView::~COpenimagefileView()
{
}

BOOL COpenimagefileView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// COpenimagefileView drawing

void COpenimagefileView::OnDraw(CDC* pDC)
{
COpenimagefileDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(!IsFirstDraw)
{
int i,j;
CDC * dc;
dc=GetDC();
for(i=0;i<m_orgHeight;i++)
for(j=0;j<m_orgWidth;j++)
{
dc->SetPixel(j,i,RGB(
m_pImageData[m_orgWidth*(m_orgHeight-i)+j],
m_pImageData[m_orgWidth*(m_orgHeight-i)+j],
m_pImageData[m_orgWidth*(m_orgHeight-i)+j]));
}

}
}

/////////////////////////////////////////////////////////////////////////////
// COpenimagefileView printing

BOOL COpenimagefileView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}

void COpenimagefileView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}

void COpenimagefileView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// COpenimagefileView diagnostics

#ifdef _DEBUG
void COpenimagefileView::AssertValid() const
{
CView::AssertValid();
}

void COpenimagefileView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

COpenimagefileDoc* COpenimagefileView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COpenimagefileDoc)));
return (COpenimagefileDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// COpenimagefileView message handlers

void COpenimagefileView::OnFileOpen()
{
COpenimagefileDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CFileDialog dlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,"bmp(*.bmp)|*.bmp||",NULL);
if(dlg.DoModal()==IDOK)
{

m_szFileName = dlg.GetFileName();
m_szFilePathName = dlg.GetPathName();
}
else
return;
m_pImageData = OpenBMP(m_szFilePathName, &m_orgWidth, &m_orgHeight);
IsFirstDraw=FALSE;
Invalidate(TRUE);
}


BYTE * COpenimagefileView::OpenBMP(CString fileName, long *width, long *height)
{
BYTE * pData;
*width = 0;
*height = 0;
if(fileName=="")
return NULL;
BITMAPINFO bmpInfo;
BITMAPFILEHEADER bmpFileHead;
CFile file;
if((file.Open(fileName,CFile::modeRead|CFile::shareDenyNone))==NULL)
{
AfxMessageBox("Can not open the file");
return NULL;
}
file.Read(&bmpFileHead,sizeof(BITMAPFILEHEADER));
file.Read(&bmpInfo,sizeof(BITMAPINFOHEADER));
*width = bmpInfo.bmiHeader.biWidth;
*height = bmpInfo.bmiHeader.biHeight;
long lFileSize = bmpFileHead.bfSize - bmpFileHead.bfOffBits;
pData = (BYTE*)new char[lFileSize];
if(!pData)
return NULL;
file.ReadHuge(pData,lFileSize);
file.Close();
return pData;
}
ccq17 2004-06-14
  • 打赏
  • 举报
回复
这里还少很多东西啊,你去看一下BMP文件的格式,没有你写的这么简单啊,还要关于显存的问题啊,去找要本关于C图形编程的书看看吧。那样你会学到更多的东西的啊,不仅是BMP文件,还有其它的一些图形的格式啊

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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