CFileDialog dlg(TRUE);
if(dlg.DoModal()== IDOK)
{
CString filename=dlg.GetFileName();
CImage img;
img.Load(filename);
CImage bmp;
if( bmp.Create(10240,10240,32))
{ int w=img.GetWidth();
int h=img.GetHeight(); for (int i =0;i<w ;i ++ )
{
for (int j=0;j <h ;j ++)
{
bmp.SetPixel(i,j,img.GetPixel(i,j));
}
}
bmp.Save(_T("g:\\aaaaa.jpg")); } }
if(dlg.DoModal()== IDOK)
{
CString filename=dlg.GetFileName();
CImage img;
img.Load(filename);
CImage bmp;
if( bmp.Create(10240,10240,32))
{ int w=img.GetWidth();
int h=img.GetHeight(); for (int i =0;i<w ;i ++ )
{
for (int j=0;j <h ;j ++)
{
bmp.SetPixel(i,j,img.GetPixel(i,j));
}
}
bmp.Save(_T("g:\\aaaaa.jpg")); } }
CFileDialog dlg(TRUE);
if(dlg.DoModal()== IDOK)
{
CString filename=dlg.GetFileName();
CImage img;
img.Load(filename);
CImage bmp;
if( bmp.Create(10240,10240,32))
{int w=img.GetWidth();
int h=img.GetHeight();for (int i =0;i<w ;i ++ )
{
for (int j=0;j <h ;j ++)
{
bmp.SetPixel(i,j,img.GetPixel(i,j));
}
}
bmp.Save(_T("g:\\aaaaa.jpg"));}}如何生成大图片??
生成图片后的摘要:
生成之后图片宽度29999像素
高度29999像素
水平分辩率 254 dpi
垂直分辩率 254 dpi
位深度 24
帧数1
vb可以处理这个东西。vc处理不了嘛??
生成图片后的摘要:
生成之后图片宽度29999像素
高度29999像素
水平分辩率 254 dpi
垂直分辩率 254 dpi
位深度 24
帧数1
这是VB程序处理出来的数据。
用内存映像文件吧。
先填好BITMAPFILEHEADER写文件里面。
再填好BITMAPINFOHEADER写进去。注意BITMAPINFOHEADER有一个biSizeImage不要超过4G,再大了就不要用这样的方法了。
然后写29999*29999*3的空间放像素(行不被4整除是要调整一下)。
然后将这个大文件一部分一部分地映射到内存里面处理。当然也可以先创建内存映像文件再写文件头和信息头。
这样大小的图不算特别大,还是好处理的。
VB有这个能力,能给出VB的代码吗?
GDI肯定是没有办法创建这么大的图像的
也许你看到这个文件只是文件而已,我也可以创建一个比这更大的图像,但是创建了你用GDI却打不开。
在window server 2003 64bit下,可以分配这么大的内存。
不知道CImage这个类,是否设置了最大值。
VB有这个能力,能给出VB的代码吗?
GDI肯定是没有办法创建这么大的图像的
也许你看到这个文件只是文件而已,我也可以创建一个比这更大的图像,但是创建了你用GDI却打不开。没说一定要用gdi实现。自己感觉GDI实现不了。vb生成的图片预览还是可以看到的。VB写的程序。是一个jpg的图片。生成内存在900M左右。不过是50 M递增。
不过这个vb程序不是我写的。
30000*30000的24bits图像已经2个多G,直接申请内存是不现实了。
用内存映像文件吧。
先填好BITMAPFILEHEADER写文件里面。
再填好BITMAPINFOHEADER写进去。注意BITMAPINFOHEADER有一个biSizeImage不要超过4G,再大了就不要用这样的方法了。
然后写29999*29999*3的空间放像素(行不被4整除是要调整一下)。
然后将这个大文件一部分一部分地映射到内存里面处理。当然也可以先创建内存映像文件再写文件头和信息头。
这样大小的图不算特别大,还是好处理的。13楼的方法和我想的一样。可是不知道代码该如何写。