日期:2014-05-19  浏览次数:20701 次

求C#图片重叠代码
如题,两张图片
string   aPath   =   " ";a图路径
string   bPath   =   " ";b图路径
string   cPath   =   " ";重叠成c图,并保存到cPath
求GDI+原码,哪位达人贴一个

------解决方案--------------------
Bitmap bp_a=new Bitmap(aPath);
Bitmap bp_b=new Bitmap(bPath);
Bitmap bp_c=new Bitmap(bp_a.Width,bp_a.Height);
Graphics theGrp = Graphics.FromImage(bp_c);
theGrp.DrawImage(bp_a,0,0,bp_a.Width,bp_a.Height);
theGrp.DrawImage(bp_b,x,y,w,h);
theGrp.Save();
theBit.Save(cPath);
------解决方案--------------------
public static void MadeIndex5(Bitmap NewPicture,Bitmap [] SmallPicture,int Distance_x,int Distance_y,int SmallWidth,int SmallHeight,int PictureHang,int PictureLie,int sort)
{
int w = NewPicture.Width,h = NewPicture.Height;
BitmapData[] PictureData = new BitmapData[sort];
System.IntPtr[] PictureScan = new IntPtr[sort];
int i = 0;
BitmapData NewData = NewPicture.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int Offset = NewData.Stride - w*3;
System.IntPtr Scan0 = NewData.Scan0;

for(i = 0;i < sort; i ++)
{
PictureData[i] = SmallPicture[i].LockBits(new Rectangle(0,0,SmallWidth,SmallHeight),ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);
PictureScan[i] = PictureData[i].Scan0;
}
int PictureOffset = PictureData[0].Stride - 3 * SmallWidth;

unsafe
{
byte *p =(byte *)(void *)Scan0;
byte *pause=(byte *)(void *)PictureScan[0];
int Hang=0,Lie=0;
i=0;

for(int j=0;j <h;j++)
{
for(int x=0;x <w;x++)
{
if((j> =(115+(Hang+1)*Distance_y+Hang*SmallHeight))&&(j <(115+(Hang+1)*(SmallHeight+Distance_y)))&&(x> =(19+(Lie+1)*Distance_x+Lie*SmallWidth))&&(x <(19+(Lie+1)*(SmallWidth+Distance_x))))
{
if((Hang*PictureLie+Lie) <sort)
{
p[2]=pause[2];
p[1]=pause[1];
p[0]=pause[0];
pause+=3;
}
if(x==(19+(Lie+1)*(SmallWidth+Distance_x)-1))
{
pause+=PictureOffset;
if((Hang*PictureLie+Lie) <sort)
PictureScan[Hang*PictureLie+Lie]=(IntPtr)pause;
Lie++;
if(Lie%PictureLie==0)
{
Lie=0;
if(j==(115+(Hang+1)*(SmallHeight+Distance_y)-1))
Hang++;
}
if((Hang*PictureLie+Lie) <sort)
pause=(byte *)(void *)PictureScan[Hang*PictureLie+Lie];
}
}
p+=3;
}
p+=Offset;
}
}
NewPicture.UnlockBits(NewData);
for(i=0;i <sort;i++)
SmallPicture[i].UnlockBits(PictureData[i]);
for(i=0;i <sort;i++)
SmallPicture[i].Dispose();
}