我有1位图对象witdh:1024px和高度:768 px
我想将此位图对象切成左右两部分,但我不想在画布中使用DrawBitmap方法,因为该方法比CopyMemory可以使用更多的CPU。
我不想使用此方法(leftImg.Canvas.DrawBitmap(MainBmp,RectF(0,0,MainBmp.Width div 2,bmp.Height),
RectF(0,0,leftImg.Width,leftImg.Height),1,True); )
MainBmp := TBitmap.Create(1024, 768);
leftImg := TBitmap.Create(MainBmp.Width div 2, MainBmp.Height);
rightImg := TBitmap.Create(MainBmp.Width div 2, MainBmp.Height);
leftBits := PAlphaColorArray(leftImg.Scanline[0]);
CopyMemory(@leftBits[0], @MainBmp.StartLine[0], (MainBmp.Width div 2) * bmp.Height);
如果我这样做,他可以复制位图的左部分,但不能复制它的左部分:
那张画正是我想做的。
剪切过程后,我需要这样而不使用任何循环(例如while或for)
谢谢
最佳答案
没办法!正如您所发现的那样,图像数据是在存储器中逐行布置的(因此是扫描行)。您想要的只有在逐列的情况下才可能实现。没有任何循环,这是不可能的。
关于delphi - 如何使用Windows CopyMemory函数复制TBitmap内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8364127/