C++ 在c+上打开图像文件+,PNG,JPEG

C++ 在c+上打开图像文件+,PNG,JPEG,c++,C++,我试图打开bg.png文件,但没有成功。没有错误,但没有显示任何内容。救救我 int main() { initwindow(600,600,"GAME"); ifstream image("bg.png"); getimage(50, 50 , 450 , 450 , image); putimage(50,50,image,COPY_PUT); system("pause"); } 您确定bg.

我试图打开bg.png文件,但没有成功。没有错误,但没有显示任何内容。救救我

int main()
    {
        initwindow(600,600,"GAME");
        ifstream image("bg.png");
        getimage(50, 50 , 450 , 450 , image);
        putimage(50,50,image,COPY_PUT);
        system("pause");
    }

您确定bg.png位于运行程序的同一文件夹中吗?如果答案是肯定的,你试过了吗

int main()
    {
        int wHANDLE=initwindow(600,600,"GAME");
        setcurrentwindow(wHANDLE);
        ifstream image("bg.png");
        getimage(50, 50 , 450 , 450 , image);
        putimage(50,50,image,COPY_PUT);
        system("pause");
    }

graphics.h
是古老的BGI库,来自Borland我发现了这个文档:

所以,这只是将图像从屏幕复制到某个内存缓冲区(允许使用后缓冲技术)。您使用
ifstream
调用它是错误的。您正在使用内存缓冲区或指针指向的区域覆盖指针(取决于
getimage
行为)。如果您确实想使用BGI进行此操作,请将图像解码到内存中,然后使用
putimage
进行查看。但我担心它不是用原始编码的,更安全的做法是用像素访问直接绘制图像

正如我写的你的另一个问题,你需要使用一些库或代码的图像解码你自己<代码>iostream不是一个好方法

对于MS-DOS使用OSapi(
int 21h
,如果没有适当覆盖它的函数)。。。对于WindowsBorland环境,使用
fileopenfilereadfileclose
。对于非Borland环境,请使用WinAPI或来自目标操作系统(如果不是windows)的相关API。要解码图像,您首先需要选择要解码的文件格式,我建议从PCX、BMP(仅限于单个像素格式)或TGA开始。像JPG、PNG、GIF这样的文件格式对于一个新手来说实在是太多了。例如,C++中的<强> GIF <强>解码器/编码器,是关于源代码+代码> 36字节/代码> +另一个代码> 15 kBys<代码>文件<强>缓存>强>缓冲和强>多线程Rt<强/>编码调度器。与PCX相比,大约有
1.5KByte
的代码加载/解码

这是我如何在 /NavaCoro VCL C++ > /Sturi>:/P>中加载纹理到GL引擎中的小例子。

int picture_load(Graphics::TBitmap *bmp,AnsiString name,int *_alpha)
    {
    if (bmp==NULL)        { _errorlog+="picture_load bmp is NULL\n"; return 0; }
    if (!FileExists(name)){ _errorlog+="picture_load file \""+name+"\" dont exist\n"; return 0; }
    bmp->HandleType=bmDIB;
    bmp->PixelFormat=pf32bit;
    AnsiString ext=ExtractFileExt(name).LowerCase();
    for(;;)
        {
        if (ext==".bmp")
            {
            bmp->LoadFromFile(name);
            break;
            }
        if (ext==".jpg")
            {
            TJPEGImage *jpg=new TJPEGImage;
            #ifdef _mmap_h
            if (jpg) mmap_new('GL',jpg,sizeof(TJPEGImage));
            #endif
            if (jpg==NULL) { _errorlog+="picture_load not enough memory\n"; return 0; }
            jpg->LoadFromFile(name);
            bmp->Assign(jpg);
            #ifdef _mmap_h
            mmap_del('GL',jpg);
            #endif
            delete jpg;
            break;
            }
        if (ext==".png")
            {
            TPNGObject *png=new TPNGObject;
            #ifdef _mmap_h
            if (png) mmap_new('GL',png,sizeof(TJPEGImage));
            #endif
            if (png==NULL) { _errorlog+="picture_load not enough memory\n"; return 0; }
            png->LoadFromFile(name);
            bmp->Assign(png);
            #ifdef _mmap_h
            mmap_del('GL',png);
            #endif
            delete png;
            break;
            }
        if ((ext==".sgi")||(ext==".rgb"))
            {
            sgi sss;
            sss.load(name);
            bmp->Width=sss.rgba->Width;
            bmp->Height=sss.rgba->Height;
            bmp->Canvas->Draw(0,0,sss.rgba);
            break;
            }
        if (ext==".pcx")
            {
            unsigned int *p,c;
            int     x,y,adr;
            int hnd,siz,l,xs,ys;
            unsigned int pal[256],r,g,b;
            Byte *dat;
            for(;;)
                {
                hnd=FileOpen(name,fmOpenRead);
                if (hnd<0) { _errorlog+="picture_load file \""+name+"\" dont exist\n"; return 0; }
                siz=FileSeek(hnd,0,2);
                FileSeek(hnd,0,0);
                dat=new Byte[siz];
                #ifdef _mmap_h
                if (dat) mmap_new('GL',dat,siz*sizeof(BYTE));
                #endif
                if (dat==NULL) { FileClose(hnd); _errorlog+="picture_load not enough memory\n"; return 0; }
                FileRead(hnd,dat,siz);
                FileClose(hnd);
                adr=siz-3*256;
                for (l=0;l<256;l++)
                    {
                    r=dat[adr]; adr++; r&=255;
                    g=dat[adr]; adr++; g&=255;
                    b=dat[adr]; adr++; b&=255;
                    c=(r<<16)|(g<<8)|(b);
                    c&=0x00FFFFFF;
                    pal[l]=c;
                    }
                xs=int(dat[ 8])-int(dat[4])+((int(dat[ 9])-int(dat[5]))<<8)+1;
                ys=int(dat[10])-int(dat[6])+((int(dat[11])-int(dat[7]))<<8)+1;

                bmp->HandleType=bmDIB;
                bmp->PixelFormat=pf32bit;
                bmp->Width=xs;
                bmp->Height=ys;
                xs=bmp->Width;
                ys=bmp->Height;

                adr=128;
                for (y=0;y<ys;y++)
                    {
                    p=(unsigned int*)bmp->ScanLine[y];
                    for (x=0;x<xs;)
                        {
                        c=dat[adr];
                        if (c<192) l=1;
                        else{
                            l=c&63;
                            adr++;
                            c=dat[adr];
                            }
                        adr++;
                        for (;l>0;l--)
                            {
                            if (x>=xs) break;
                            p[x]=pal[c];
                            x++;
                            }
                        }
                    }
                #ifdef _mmap_h
                mmap_del('GL',dat);
                #endif
                delete[] dat;
                break;
                }
            break;
            }
        if (ext==".dds")
            {
            DDS::load(bmp,name);
            _errorlog+=DDS::_errorlog;
            DDS::_errorlog="";
            break;
            }
        _errorlog+="picture_load unsuported file extension \""+ext+"\"\n";
        return 0;
        }
    bmp->HandleType=bmDIB;
    if (_alpha) _alpha[0]=(bmp->PixelFormat==pf32bit);
    bmp->PixelFormat=pf32bit;
    return 1;
    }
int图片加载(图形::TBitmap*bmp,显示名称,int*\u alpha)
{
如果(bmp==NULL){u errorlog+=“图片\u加载bmp为NULL\n”;返回0;}
如果(!FileExists(name)){u errorlog+=“picture\u load file\”“+name+”\“not exists\n”;返回0;}
bmp->HandleType=bmDIB;
bmp->PixelFormat=PF32位;
AnsiString ext=ExtractFileExt(name).LowerCase();
对于(;;)
{
如果(ext==“.bmp”)
{
bmp->LoadFromFile(名称);
打破
}
如果(ext==“.jpg”)
{
TJPEGImage*jpg=新的TJPEGImage;
#ifdef_mmap_h
如果(jpg)mmap_new('GL',jpg,sizeof(TJPEGImage));
#恩迪夫
如果(jpg==NULL){u errorlog+=“图片\u加载的内存不足\n”;返回0;}
jpg->LoadFromFile(名称);
bmp->Assign(jpg);
#ifdef_mmap_h
mmap_del('GL',jpg);
#恩迪夫
删除jpg;
打破
}
如果(ext==“.png”)
{
TPNGObject*png=新的TPNGObject;
#ifdef_mmap_h
如果(png)mmap_new('GL',png,sizeof(TJPEGImage));
#恩迪夫
如果(png==NULL){u errorlog+=“图片\加载的内存不足\n”;返回0;}
png->LoadFromFile(名称);
bmp->Assign(png);
#ifdef_mmap_h
mmap_del('GL',巴布亚新几内亚);
#恩迪夫
删除巴布亚新几内亚;
打破
}
if((ext==“.sgi”)| |(ext==“.rgb”))
{
sgi sss;
sss.load(名称);
bmp->Width=sss.rgba->Width;
bmp->Height=sss.rgba->Height;
bmp->Canvas->Draw(0,0,sss.rgba);
打破
}
如果(ext==“.pcx”)
{
无符号整数*p,c;
int x,y,adr;
国际货币基金组织(hnd、siz、l、xs、ys);
无符号整数pal[256],r,g,b;
字节*dat;
对于(;;)
{
hnd=文件打开(名称,fmOpenRead);
如果(hnd

…以文本模式打开文件,在Windows和旧Mac上,表示行尾和文本结尾的某些字节序列在输入和输出时会发生更改

你不会想要的



BaummitAugen说,在C++中,你最接近“标准”图像处理的是.< > > GeMime>代码> >代码> Puthime<代码>,这不是标准的C++,所以缺少诊断问题的信息。我应该怎么做@??我怀疑在代码< GEMTIGE< /COD>或<代码> PUTIMEAGE <代码>中没有什么工作。(不管它们是什么),我确信它们会返回某种成功/失败值(您不必费心检查)。事实上,您没有对任何函数调用进行成功/失败检查,因此您无法知道其中哪一个函数调用失败。正如您已经被告知的,您的问题中没有足够的信息可供我们帮助。您应该将问题提供给我们,并告诉我们您正在使用哪些库。graphics.h,iostreamIf您必须在你的回答中要求澄清,它可能不应该是一个答案。一般来说,只为处于可回答状态的问题写答案,闲聊的猜测对这种格式来说并不是很好的答案。很高兴知道。没关系。事实上,我只是阅读了文档,我的修改在一个窗口内是无用的。所以我的答案是也没用。除了其他建议。看看图像文件是否可访问,是否在你的工作文件夹中。+1…顺便说一句,我在

ifstream image("bg.png");