东西不在多,最原始的内存图形数据拷贝功能源码。
为什么是早期源码,因为很多源码是改了又改,改完后不认识了呀,而且理解能力在源码升级后都有所下降。
抛出c源码:
矩形域图形的复制:
本来没有解释,我加一下:
B8000000是显示内存的起始点,row列, row1 列头,row2列尾,col行,col1行头,col2行尾。
719是720像素的总值,0-719。347是348像素的总值,0-347。是720X348像素直接写显存。
除8是8位像素比特值, 90L是内存拷贝的地址递增数。
这段函数是直接拷贝数据到显示卡内存上的一个函数。
早期编程的经典代码,十分简要言明。工工整整,不属于商业标准c库的代码,不依赖图形库。
#include "math.h"
void hgc_copy(row1,col1,row2,col2.row,col)
int row1,col1,row2,col2,row,col
{
int x,y,i,j,m,n;
long int ix,ix1,k,l;
char t;
char far *prt=(char far *)0xB8000000;
m=row2-row1;n=col2-col1;
if (row<0)row=0;
if (row+m>347)row=347-m;
if (col<0)col=0;
if (col+n>719)col=719-n;
k=(long)(row-row1)*90L+(long)((col-col1)/8);
x=row;y=col;
m=col1/8;n=col2/8;
if (k<0L)
{
for (i=row1;i<=row2;i++)
{
ix1=(long)(i/4)*90L+(long)(i%4)*8192L+(long)(y/8);
for (j=m;j<=n;j++)
{
t=*(ptr+ix1);*(ptr+ix)=t;
ix1=ix1+1L;ix=ix+1L;
}
x=x+1;
}
}
else
{
x=row+row2-row1;y=col+col2-col1;
for (i=row2;i>=row1;i--)
{
ix1=(long)(i/4)*90L+(long)(i%4)*8192L+(long)n;
ix=(long)(x/4)*90L+(long)(x%4)*8192L+(long)(y/8);
for (i=n;j>=m;j--)
{
t=*(ptr+ix1);*(ptr+ix)=t;
ix1=ix1-1L;ix=ix-1L;
}
x=x-1;
}
}
return;
} 






鄂公网安备42010402000303号