当前位置:首页 > 我的程序 > 正文内容

东西不在多,最原始的内存图形数据拷贝功能源码。

Peirre3年前 (2022-11-14)我的程序312

为什么是早期源码,因为很多源码是改了又改,改完后不认识了呀,而且理解能力在源码升级后都有所下降。

抛出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;
}

111.jpg

分享给朋友:

相关文章

阿里云后台的一个身份证信息查询工具。

阿里云后台的一个身份证信息查询工具。

注:此软件时效性已过,只在此陈列,没有什么意义。工具主图形界面有时会欠费,查不了时,请付1分钱给阿里云。下载地址:个人身份证阿里云查询.rar...

几种在linux中的调试器的编译结果。

几种在linux中的调试器的编译结果。

很多人用源码进行编译,会不成功,原因有很多,我现在讲讲linux 下必有的gdb调试器来说明一下。我用的linux 系统 是 优麒麟 19.04.10.1 加强版,属于试用版。随系统自带的gdb是8....

关于ch341驱动,联动3D打印机USB串口通讯.

关于ch341驱动,联动3D打印机USB串口通讯.

手上有个3D打印机,搬家的原因,好久没用.天气热了,打印温度很适合,正好可以使用.又过了一年.发现linux 版本内核已经升级,和原来的系统不一样了. 按照3D打印机的说明,和寻找它的程序,原来的方法...

linux 下的 opengl SDK。

linux 下的 opengl SDK。

opengl 图形库是开放式图形库,最近出了一个freeglut3 我们下载它:sudo apt-get install freeglut3sudo apt-get install freeglut3...

linux 下的《仙剑奇侠传》

linux 下的《仙剑奇侠传》

以前的DOS游戏《仙剑奇侠传》是炙制人口的一个很容易上手的游戏。这个游戏流行了很多年。很多人在玩过多年以后,重温旧梦,回味游戏之中的情感。这个游戏再版了很多次了。现在linux 下也可以直接玩这个游戏...

USB设备的插入机制与USB驱动故障。

USB设备的插入机制与USB驱动故障。

USB主机检测设备,首先在USB集线器的每个端口的D+,D-上,分别接了一个15K欧姆的下拉电阻到地。集线器端口为空时,被这两个电阻拉低了电平。在USB设备端,D+或者D- 上接了上拉1.5K电阻。全...