C++ 在c+上打开图像文件+,PNG,JPEG
我试图打开bg.png文件,但没有成功。没有错误,但没有显示任何内容。救救我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.
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
,如果没有适当覆盖它的函数)。。。对于Windows和Borland环境,使用fileopenfilereadfileclose
。对于非Borland环境,请使用WinAPI或来自目标操作系统(如果不是windows)的相关API。要解码图像,您首先需要选择要解码的文件格式,我建议从PCX、BMP(仅限于单个像素格式)或TGA开始。像JPG、PNG、GIF这样的文件格式对于一个新手来说实在是太多了。例如,C++中的<强> GIF <强>解码器/编码器,是关于源代码+代码> 36字节/代码> +另一个代码> 15 kBys<代码>文件<强>缓存>强>缓冲和强>多线程Rt<强/>编码调度器。与PCX相比,大约有1.5KByte
的代码加载/解码
这是我如何在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
BaummitAugen说,在C++中,你最接近“标准”图像处理的是.< > > GeMime>代码> >代码> Puthime<代码>,这不是标准的C++,所以缺少诊断问题的信息。我应该怎么做@??我怀疑在代码< GEMTIGE< /COD>或<代码> PUTIMEAGE <代码>中没有什么工作。(不管它们是什么),我确信它们会返回某种成功/失败值(您不必费心检查)。事实上,您没有对任何函数调用进行成功/失败检查,因此您无法知道其中哪一个函数调用失败。正如您已经被告知的,您的问题中没有足够的信息可供我们帮助。您应该将问题提供给我们,并告诉我们您正在使用哪些库。graphics.h,iostreamIf您必须在你的回答中要求澄清,它可能不应该是一个答案。一般来说,只为处于可回答状态的问题写答案,闲聊的猜测对这种格式来说并不是很好的答案。很高兴知道。没关系。事实上,我只是阅读了文档,我的修改在一个窗口内是无用的。所以我的答案是也没用。除了其他建议。看看图像文件是否可访问,是否在你的工作文件夹中。+1…顺便说一句,我在
ifstream image("bg.png");