这个是TIFF的写操作void TIFFTestDoc::OnFileSave(){TIFF *image;
TIFF * tiff = TIFFOpen((char *)(LPCTSTR)m_filename,"");............//写入}m_filename是当前打开的tiff文件的路径,为什末写入的时候程序会退出,而如果把m_filename替换为不是正在打开的文件写入就会正常,怎样才能覆盖当前打开的文件?谢谢!!!!!!!!!!
TIFF * tiff = TIFFOpen((char *)(LPCTSTR)m_filename,"");............//写入}m_filename是当前打开的tiff文件的路径,为什末写入的时候程序会退出,而如果把m_filename替换为不是正在打开的文件写入就会正常,怎样才能覆盖当前打开的文件?谢谢!!!!!!!!!!
解决方案 »
- LoadImage如何从外部exe文件中提取icon?
- 新年散分
- CButton派生自绘制,快速点击鼠标时仍有默认按钮图形一闪而过,如何去掉呢,谢谢!
- 大虾请进,如何打开一个文件夹
- 求助《Visual C++ 技术内幕》(第四版)!
- 请问怎么在视图区中绘制圆和多边形啊?在线等待!
- 为何我的vc不能用模板?
- 这是我第4次问这个问题了,请高手们看看吧!很简单的问题!!
- 如果要双击ListCtrl中的某一行就执行一段代码,要用什么函数呀?
- 怎么把一个CString类型的字符串转换成LPCWSTR或者是LPCTSTR类型?
- 给大家散分了[一来庆祝刘翔110米栏冠军][二来请大家出主意:到底哪个虚拟主机和域名商好]
- 我在做视景仿真,现在需要建立一个自定义的CUSTOM APPWIZARD 的代码生成项目,请问高手该如何解决。
TIFFOpen()函数有问题,你可以自己写打开语句:
FILE *stream;
if( (stream = fopen( ((char *)(LPCTSTR)m_filename,"w+" )) != NULL )
{
........//写入操作
}
//AfxMessageBox("1111");
TIFF *image;
if((image = TIFFOpen("d:/rgba1.tiff", "a"))!= NULL){
//AfxMessageBox("222"); TIFFSetField(image,TIFFTAG_IMAGEWIDTH, m_dib->w);
TIFFSetField(image,TIFFTAG_IMAGELENGTH, m_dib->h);
TIFFSetField(image,TIFFTAG_BITSPERSAMPLE, m_dib->persample);
TIFFSetField(image,TIFFTAG_SAMPLESPERPIXEL, 4); TIFFSetField(image,TIFFTAG_ROWSPERSTRIP, m_dib->rows_perstrip);
TIFFSetField(image,TIFFTAG_COMPRESSION, m_dib->compression );
TIFFSetField(image,TIFFTAG_PHOTOMETRIC, m_dib->photo_metric);
TIFFSetField(image,TIFFTAG_FILLORDER, m_dib->fill_order); TIFFSetField(image, TIFFTAG_PLANARCONFIG, m_dib->planar_config);
TIFFSetField(image, TIFFTAG_XRESOLUTION, m_dib->x_res);
TIFFSetField(image, TIFFTAG_YRESOLUTION, m_dib->y_res);
TIFFSetField(image, TIFFTAG_RESOLUTIONUNIT, m_dib->res_u); BYTE *buffer = (BYTE *)malloc(m_dib->w*4);
for (int i=0 ; i< m_dib->h ; i++){
memcpy(buffer, m_dib->m_pBits + (m_dib->h - i - 1)*m_dib->w, m_dib->w*4);
TIFFWriteScanline(image, buffer,i , 0);
}
TIFFClose(image);
}
}void TIFFTestDoc::OnFileOpen()
{
CString file_types = "TIFF Files (*.tiff,*.tif)|*.tif;*.tiff;*.tif;||"; CFileDialog dlg(TRUE,NULL,NULL,
OFN_HIDEREADONLY | OFN_EXPLORER,
(LPCTSTR)file_types,NULL);
if (dlg.DoModal() == IDOK)
{
m_filename = dlg.GetPathName();
TIFF * tiff = TIFFOpen((char *)(LPCTSTR)m_filename,"r");
if (tiff)
{
uint32 w=0, h=0;
if (m_dib) delete m_dib;
m_dib = new DIBSection; TIFFGetField(tiff,TIFFTAG_IMAGEWIDTH, &w);
TIFFGetField(tiff,TIFFTAG_IMAGELENGTH, &h);
TIFFGetField(tiff,TIFFTAG_BITSPERSAMPLE, &m_dib->persample);
TIFFGetField(tiff,TIFFTAG_SAMPLESPERPIXEL, &m_dib->sample_perpixel); TIFFGetField(tiff,TIFFTAG_ROWSPERSTRIP, &m_dib->rows_perstrip);
TIFFGetField(tiff,TIFFTAG_COMPRESSION, &m_dib->compression);
TIFFGetField(tiff,TIFFTAG_PHOTOMETRIC, &m_dib->photo_metric);
TIFFGetField(tiff,TIFFTAG_FILLORDER, &m_dib->fill_order); TIFFGetField(tiff, TIFFTAG_PLANARCONFIG, &m_dib->planar_config);
TIFFGetField(tiff, TIFFTAG_XRESOLUTION, &m_dib->x_res);
TIFFGetField(tiff, TIFFTAG_YRESOLUTION, &m_dib->y_res);
TIFFGetField(tiff, TIFFTAG_RESOLUTIONUNIT, &m_dib->res_u); if ((w > 0) && (h > 0)){ m_dib->m_pBits = (uint32*)GlobalAlloc(GMEM_FIXED, (w * h * sizeof (uint32))); if (m_dib->m_pBits){ m_dib->w=w; m_dib->h=h; if (m_dib){ m_dib->Create(w,h,32);
TIFFReadRGBAImage(tiff, w, h, m_dib->m_pBits, 0);
SetTitle(m_filename); }
} UpdateAllViews(NULL);
} TIFFClose(tiff);
}
}
}
什么是"打开的,正在打开的文件"? 在你的程序里还是别的程序里
{
CString file_types = "TIFF Files (*.tiff,*.tif)|*.tif;*.tiff;*.tif;||";CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_EXPLORER,(LPCTSTR)file_types,NULL);
if (dlg.DoModal() == IDOK)
{
m_filename = dlg.GetPathName();
TIFF * tiff = TIFFOpen((char *)(LPCTSTR)m_filename,"r");..........//打开void TIFFTestDoc::OnFileSave(){TIFF *image;
if((image = TIFFOpen((char *)(LPCTSTR)m_filename, "w"))!= NUL){......//保存(image = TIFFOpen((char *)(LPCTSTR)m_filename, "w")返回0,打开失败