这个是TIFF的写操作void TIFFTestDoc::OnFileSave(){TIFF *image;
TIFF * tiff = TIFFOpen((char *)(LPCTSTR)m_filename,"");............//写入}m_filename是当前打开的tiff文件的路径,为什末写入的时候程序会退出,而如果把m_filename替换为不是正在打开的文件写入就会正常,怎样才能覆盖当前打开的文件?谢谢!!!!!!!!!!

解决方案 »

  1.   

    TIFF * tiff = TIFFOpen((char *)(LPCTSTR)m_filename,"w");
      

  2.   

    只有两种可能,一个是没有成功打开,可以用if判断一下返回值,还有就
    TIFFOpen()函数有问题,你可以自己写打开语句:
    FILE *stream;
    if( (stream = fopen( ((char *)(LPCTSTR)m_filename,"w+" )) != NULL )
    {
    ........//写入操作
    }
      

  3.   

    我shi 了 , 是打不开文件,但换个文件名就能打开,我觉得是不是已经打开的文件有什末特别的属性,覆盖的时候要去掉属性才行??
      

  4.   

    TIFFOpen() 是libtiff提供的函数,不会有错的,是3.4版
      

  5.   

    void TIFFTestDoc::OnFileSave(){
        //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);
    }
    }
    }
      

  6.   

    “m_filename是当前打开的tiff文件的路径,为什末写入的时候程序会退出,而如果把m_filename替换为不是正在打开的文件写入就会正常,怎样才能覆盖当前打开的文件?”
    什么是"打开的,正在打开的文件"? 在你的程序里还是别的程序里
      

  7.   

    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");..........//打开void TIFFTestDoc::OnFileSave(){TIFF *image;
    if((image = TIFFOpen((char *)(LPCTSTR)m_filename, "w"))!= NUL){......//保存(image = TIFFOpen((char *)(LPCTSTR)m_filename, "w")返回0,打开失败