显示BMP图象的程序

在LCD任意位置显示一张bmp图片函数 #include <stdio.h> #include <sys/mman.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> /* 功能:在LCD的(s_x, s_y)为起点显示一张wight*high的bmp图片 参数:int s_x 图片在LCD上显示的起始x坐标 int s_y 图片在L. 阅读详情
显示BMP图象的程序
  
 
640*480 256 色 .BMP 文件显示程序,可以浏览、同时显示 4 幅图象,也可以 在屏幕上开一个窗口显示 .BMP 图象,并可以使用上下左右箭头键、PageUp/PageDown、Ctrl+Left、Ctrl+Right键浏览整幅图象,在S3、ATI等VGA卡上 调试通过

/*
   SHOWBMP.C --- Show .BMP files images for SVGA 640*480(256/16) mode
   M.L.Y  2000.9, 2000.12

   Please compile this file by Borland C++ 3.1:
     BCC -ml SHOWBMP.C
*/

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dir.h>
#include "GCFSVGA.C"

typedef struct
{
  int  bfType;            /* 文件类型, 必须为 "BM" (0x4D42) */
  long bfSize;            /* 文件的大小(字节) */
  int  bfReserved1;       /* 保留, 必须为 0 */
  int  bfReserved2;       /* 保留, 必须为 0 */
  long bfoffBits;         /* 位图阵列相对于文件头的偏移量(字节) */
} BITMAPFILEHEADER;       /* 文件头结构 */

typedef struct
{
  long biSize;            /* size of BITMAPINFOHEADER */
  long biWidth;           /* 位图宽度(像素) */
  long biHeight;          /* 位图高度(像素) */
  int  biPlanes;          /* 目标设备的位平面数, 必须置为1 */
  int  biBitCount;        /* 每个像素的位数, 1,4,8或24 */
  long biCompress;        /* 位图阵列的压缩方法,0=不压缩 */
  long biSizeImage;       /* 图像大小(字节) */
  long biXPelsPerMeter;   /* 目标设备水平每米像素个数 */
  long biYPelsPerMeter;   /* 目标设备垂直每米像素个数 */
  long biClrUsed;         /* 位图实际使用的颜色表的颜色数 */
  long biClrImportant;    /* 重要颜色索引的个数 */
} BITMAPINFOHEADER;       /* 位图信息头结构 */

typedef struct
{
  USGC rgbBlue;
  USGC rgbGreen;
  USGC rgbRed;
  USGC rgbReserved;
} RGBQUAD;

BITMAPFILEHEADER FileHead;
BITMAPINFOHEADER InfoHead;
int  gl_index_color = NO;  /* first .BMP file */

/* ------------------------------------------------------------------------- */
int  read_palette(FILE *fp, USGC pal[][3], int colornum)
/*
   将文件(指针fp)的当前位置的调色板数据读到 pal 中,colornum 是颜色数
*/
{
  int  i;

  memset(pal, 0, 3*colornum);
  for(i = 0; i < colornum; i++)
  {
    pal[i][2] = (char)fgetc(fp) >> 2;  /* Blue */
    pal[i][1] = (char)fgetc(fp) >> 2;  /* Green */
    pal[i][0] = (char)fgetc(fp) >> 2;  /* Red */
    fgetc(fp);
  }
  return 0;
}

/* ------------------------------------------------------------------------- */
int  show_bmp(FILE *fp, int color_index[256])
/*
   按当前参数重新显示 .BMP 文件(文件指针 fp) (2色,16色或256色)
   若是非第一幅图象,以第一幅图象调色板为准,颜色号索引表为 color_index
   返回:  0 --- ok
         -1 --- 显示图象时读文件出错
*/
{
  int  y, n, i, j, k;
  long file_pos;
  USGC buf[4096];         /* 文件中读出的一行图象 */
  USGC linebuf[4096];     /* line buffer (一行图象) */

  if(gl_browse_bmp == 1 && gn_x0 == gn_x0_old && gn_y0 == gn_y0_old)
    return 0;
  gn_x0_old = gn_x0;
  gn_y0_old = gn_y0;

  for(y = 0; y < gn_win_h; y++)
  {
    memset(linebuf, 0, 640);

    if(gn_x0 >= gn_pic_w || y + gn_y0 >= gn_pic_h) n = 0;
    else if(gn_x0 + gn_win_w > gn_pic_w) n = gn_pic_w - gn_x0;
    else n = gn_win_w;

    /* 从文件头开始算: */
/*
    file_pos = FileHead.bfoffBits +
               (long)(gn_pic_h - 1 - y - gn_y0) * gn_line_bytes + gn_x0;
*/
    file_pos = FileHead.bfoffBits +
               (long)(gn_pic_h - 1 - y - gn_y0) * gn_line_bytes;

    /* 大部分书上是从文件尾开始算, 正向偏移: */
    /*  file_pos = FileHead.bfSize -
                   (long)(y + gn_y0 + 1) * gn_line_bytes + gn_x0; */

    if(n > 0)
    {
      fseek(fp, file_pos, SEEK_SET);
/* 如果采用反向偏移: */
/*    fseek(fp, -file_pos, SEEK_END); */
/*
      if(fread(linebuf, 1, n, fp) != n)
        return -1;
*/
      if(fread(buf, 1, gn_line_bytes, fp) != gn_line_bytes)
        return -1;
      for(i = 0, j = 0; i < gn_line_bytes; i++)
      {
        for(k = 0; k < gn_pix_pb; k++)
        {
          linebuf[j++] = (buf[i] & gc_base) >> (8 - gn_bit_pp);
          buf[i] <<= gn_bit_pp;
        }
      }

      if(gl_index_color == YES)
      {
        for(i = 0; i < n; i++)
          linebuf[i] = color_index[linebuf[i>;
      }
    }
/*
    VESA_putimage_256(y + gn_win_top, gn_win_left, linebuf, gn_win_w,
                      IMG_COPY_PUT);
*/
    if(gn_vid_color_num == 16)
      VGA_putimage_16(y + gn_win_top, gn_win_left, linebuf+gn_x0, gn_win_w,
                      IMG_COPY_PUT);
    else /* gn_vid_color_num = 256 */
      VESA_putimage_256(y + gn_win_top, gn_win_left, linebuf+gn_x0, gn_win_w,
                        IMG_COPY_PUT);
/* 下列语句在 640*480*256 方式下因 buffer 超过 64K , 所以是错误的:
    p = MK_FP(0xA000, (y + gn_win_top) * gn_MAX_X_RES + gn_win_left);
    memmove(p, linebuf, gn_win_w);
*/
  }
  return 0;
}

/* ------------------------------------------------------------------------- */
int  show_bmp_img(char *bmpfile, int wy0, int wx0, int wy, int wx)
/*
   在 wy0 行 wx0 列开始显示 bmpfile 文件的图象,窗口高 wy、宽 wx

   同屏幕显示多幅图象有调色板问题:
   本程序使用第 1 幅图象的调色板,并计算出调色板各种颜色的灰度值,
   对后面的图象其调色板某种颜色的灰度值与第一幅图象调色板中某种颜
   色的灰度值最接近,就用第一幅图象调色板的那种颜色代替它,生成颜
   色号索引表 color_index。
   由于图象中可能有多种颜色被同一种屏幕颜色替代回产生较大的失真,
   所以又要把屏幕调色板中的这种颜色改为这些颜色的平均值。

   返回:  0 --- ok
         -1 --- 打开文件出错
         -2 --- 读文件头出错
         -3 --- 非 .BMP 文件
         -4 --- 读文件信息头出错
         -5 --- 本程序不支持压缩文件
         -6 --- 颜色数本程序不支持(本程序只处理2色,16色或256色图象)
         -7 --- 图象超宽(>4096)
         -8 --- 显示图象时读文件出错
*/
{
  FILE *fp;
  register int i, j, k;
  int  color2;
  USGC pal2[256][3];  /* palette data */
  float gray2[256];
  int  c_index[256];
  float pre_gray_val, gray_val;
  int  rr, gg, bb;

  if((fp = fopen(bmpfile, "rb")) == NULL)
    return(-1);
  if(fread((char *)&FileHead,1,sizeof(BITMAPFILEHEADER),fp) !=
     sizeof(BITMAPFILEHEADER))
  {
    fclose(fp);
    return -2;
  }
  if(*((char *)&(FileHead.bfType)) != ''B'' ||
     *((char *)&(FileHead.bfType) + 1) != ''M'')
  {
    fclose(fp);
    return -3;
  }
  if(fread((char *)&InfoHead,1,sizeof(BITMAPINFOHEADER),fp) !=
     sizeof(BITMAPINFOHEADER))
  {
    fclose(fp);
    return -4;
  }
  if(InfoHead.biCompress != 0)
  {
    fclose(fp);
    return -5;
  }
  if(InfoHead.biBitCount != 1 && InfoHead.biBitCount != 4 &&
     InfoHead.biBitCount != 8)
  {
    fclose(fp);
    return -6;
  }
  if(InfoHead.biWidth > 4096)
  {
    fclose(fp);
    return -7;
  }

  gn_pic_w = (USGI)InfoHead.biWidth;
  gn_pic_h = (USGI)InfoHead.biHeight;
  gn_pic_lb = gn_pic_w / (8 / InfoHead.biBitCount);
  gn_line_bytes = ((gn_pic_lb + 3) / 4) * 4;
  /* .BMP 文件每行是凑满 4 字节倍数的 */
  gn_bit_pp = InfoHead.biBitCount;           /* 每个像素占用位数 */
  gn_pix_pb = 8 / gn_bit_pp;                 /* 每个字节像素个数 */
  gc_base = 0xFF << (8 - gn_bit_pp);         /* 运算基 */

  if((1 << InfoHead.biBitCount) > gn_vid_color_num) /* 屏幕颜色数比文件小 */
  {
    fclose(fp);
    return 0;
  }

  if(gl_index_color == NO)  /* first file */
    gn_color_num = 1 << InfoHead.biBitCount;
  else
    color2 = 1 << InfoHead.biBitCount;

  gn_win_left = min(max(wx0, 0), gn_MAX_X_RES - 1);
  gn_win_top = min(max(wy0, 0), gn_MAX_Y_RES - 1);
  if(wx <= 0) gn_win_w = gn_pic_w;
  else        gn_win_w = wx;
  gn_win_w = min(gn_win_w, gn_MAX_X_RES - gn_win_left);
  if(wy <= 0) gn_win_h = gn_pic_h;
  else        gn_win_h = wy;
  gn_win_h = min(gn_win_h, gn_MAX_Y_RES - gn_win_top);

  if(gl_set_palette == NO)
  {
    read_palette(fp, ga_palette, gn_color_num);
    calc_pal_gray(ga_palette, ga_gray);
  }
  else
  {
    read_palette(fp, pal2, color2);
    calc_pal_gray(pal2, gray2);
    for(j = 0; j < color2; j++)
    {
      pre_gray_val = 300.0;
      for(i = 0; i < gn_color_num; i++)
      {
        gray_val = gray2[j] - ga_gray[i];
        if(gray_val < 0.0) gray_val = -gray_val;
        if(gray_val < pre_gray_val)
        {
          pre_gray_val = gray_val;
          k = i;
        }
      }
      c_index[j] = k;
    }
    for(i = 0; i < gn_color_num; i++)
    {
      k = 1;
      rr = ga_palette[i][0];
      gg = ga_palette[i][1];
      bb = ga_palette[i][2];
      for(j = 0; j < color2; j++)
      {
        if(i == c_index[j])
        {
          k++;
          rr += pal2[j][0];
          gg += pal2[j][1];
          bb += pal2[j][2];
        }
      }
      ga_palette[i][0] = rr/k;
      ga_palette[i][1] = gg/k;
      ga_palette[i][2] = bb/k;
    }
    gl_set_palette = NO;
  }

  VGA_set_palette((USGC *)ga_palette, gn_color_num);
  while(1)
  {
    if(show_bmp(fp, c_index) != 0)
    {
      fclose(fp);
      return -8;
    }
    if(gl_browse_bmp != 1) break;
    if(browse_pic_read_key() == KEY_ESC) break;
  }
  gl_index_color = YES;  /* first file finished */
  fclose(fp);
  return 0;
}

/* ------------------------------------------------------------------------- */
char *bmp_info(char *filename, char *info_str)
/*
   将 .BMP 文件 filename 的信息输出到字符串 info_str 中并返回
*/
{
  sprintf(info_str, "%s %dx%d(%d)", filename, gn_pic_w, gn_pic_h,
          1 << InfoHead.biBitCount);
  return info_str;
}

/* ------------------------------------------------------------------------- */
int  main(int argc, char **argv)
{
  int  mode = 0x5D, wx0 = 0, wy0 = 0, wx = 0, wy = 0;
  int  rc = 0;    /* function return code */
  USGC cls_color = 0x0F;
  int  func;
  struct ffblk ffblk;
  int  done;
  int  m = 0;
  char info_str[256];

  if(argc < 3)
  {
    printf("/nShow .BMP files images for SVGA 640*480(256/16 colors) mode/n");
    printf("(C) M.L.Y  2000.9, 2000.12/n/n");
    printf("Usage: %s 1 bmpfile win_left win_top win_w win_h color/n",
           strupr(argv[0]));
    printf("   or: %s 2 *.BMP color/n", strupr(argv[0]));
    printf("where: color = 16 or 256(default)/n");
    printf("/ne.g.: %s 1 LOGO256.BMP 0 0 300 200 256/n", strupr(argv[0]));
    return 1;
  }
  func = atoi(argv[1]);
  if(func == 1)
  {
    if(argc >= 4) wx0 = atoi(argv[3]);
    if(argc >= 5) wy0 = atoi(argv[4]);
    if(argc >= 6) wx = atoi(argv[5]);
    if(argc >= 7) wy = atoi(argv[6]);
    if(argc >= 8)
      if(atoi(argv[7]) == 16) mode = 0x12;
    gl_browse_bmp = YES;         /* can browse the image */
  }
  else
  {
    if(argc >= 4)
      if(atoi(argv[3]) == 16) mode = 0x12;
    gl_browse_bmp = NO;
  }

  set_mode(mode);
  if(func == 1)
    rc = show_bmp_img(argv[2], wy0, wx0, wy, wx);
  else
  {
    SVGA_cls(cls_color);
    done = findfirst(argv[2], &ffblk, 0);
    while (!done)
    {
      func = 0;
      rc = show_bmp_img(ffblk.ff_name, m/2*240+6, m%2*320+6, 200, 300);
      if(rc == 0)
      {
        SVGA_disp8x8ascstr(bmp_info(ffblk.ff_name, info_str),
                           m/2*240+210, m%2*320+10, m+0xa, IMG_XOR_PUT);
        m++;
      }
      if(m >= 2*2)
      {
        m = 0;
        func = getch();
        SVGA_cls(cls_color);
      }
      done = findnext(&ffblk);
    }
    if(func == 0) getch();  /* wait press any key to exit */
  }
  set_mode(3);
  if(rc != 0) printf("/nError: return code = %d/n", rc);
  return 0;
}

/* End of file */

 
DELPHI存取JPEG文件到SQL Server数据库(续文) 在"DELPHI存取JPEG文件到SQL Server数据库"发表之后,有许多网友来电表示支持和相关的技术咨询,在此首先对那些关心本文的朋友们表示衷心的感谢。   由于网友的需要做一个档案管理系统,存取jpeg文件到sql 2000数据库中,但在dbimage中及qrdbimage中均不能正常显示jpeg的文件,此为borland的限制,虽然使用第三方控件能达到要求,但我们还是来原始的实现一下 阅读详情

相关推荐

C语言读取bmp图像并做简单显示

C语言读取bmp图像信息并做简单显示)bmp文件格式读取bmp文件信息并展示 bmp文件格式 bmp文件大体上分为四个部分: bmp文件构成 位图文件头BITMAPFILEHEADER 位图信息头BITMAPINFOHEADER 调色板Palette 实际的位图数据ImageDate 第一部分为位图文件头,位图文件头长度固定,为14个字节。 typdef struct { WORD bfType; //指定文件类型,必须是0x424d,即”BM” DWORD bfSiz

qq_44310495的博客 1万+

[完美解决]JZ2240最简单方式显示一张BMP图像

此方法是通过用户——内核——驱动方法实现的,不是直接操作硬件。 实现框架     1.打开LCD设备     2.打开BMP图片     3.偏移54个字节     4. 24位的bmp图像转化为S3C2440下4.3寸显示屏每位像素用16位表示的图片(注意:某些LCD 1个像素用32位表示)     5.读取BMP图片信息     6.往LCD写数据     7.关闭BMP图片 ...

Turf96的博客 1315

showbmp

169KB 16色BMP位图的显示。可以做一个DOS的开机界面。

实训笔记四

文章目录图片格式LCD屏幕的使用 图片格式 1、jpg(JPEG) 2、png 3、bmp(无损压缩,占用空间比较大) 4、GIF(有损压缩) BMP图片: 1、把颜色数据保存在每一个单独的像素中,不会做任何压缩。 2、图片的扫描方式:从左到右,从下往上。 3、24位位图,色深是24位,由三原色RGB组成。 4、BMP图片所占的字节数一定要被4整除,如果不够4字节,会被垃圾数据填充,凑够4字节为止。 5、BMP图片 LCD屏幕的使用 1、读取数据 lcd屏幕是线性结构,一行一行读取,从头开始 3、访问帧

m0_47222444的博客 411

c语言显示位图ShowBMP

标准c显示bmp useage: showbmp jjw.bmp 在DOS命令行下输入:showbmp jjw.bmp就可以显示图形了 注意: 1.图形要是8位或24位的bmp图象,否则不能显示 2.本程序已经编译通过,但是显示图形的时候有点慢,毕竟是边转换边显示嘛 ++++++++++++++ 铁木箱子 2005-5-15 ++++++++++++++

ShowBMP

用VC++实现在对话框界面上显示BMP图片

bmp图片显示(任意位置任意大小)

文章目录前言图片显示1.普通全屏(800*480)显示bmp2.在任意位置显示任意大小bmp图片头文件 前言 Linux系统,GEC6818,800*480,bmp图片 图片显示 由文件IO实现(open,read,write)。 1.普通全屏(800*480)显示bmp 代码如下(示例): //显示完整图片的接口函数 void show_bmp(char *photoname) { //存储图片像素信息 char bmpbuf[800*480*3]; int tmpbuf[800*480];

潇筱巯的博客 5545

showBMP_显示图片_bmp_MFC_

基于MFC单文档,能够在MFC中显示BMP格式图片的程序

Linux framebuffer显示bmp图片

整理了几位大牛们的图片相关的资料 framebuffer简介      帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。framebuffer是LCD对应的一中HAL(硬件抽象层),提供抽象的,统一的接口操作,用户不必关心硬件层是怎么实施的。这些都是由Framebuffer设备

new_abc的专栏 1万+

相机光学(三十八)——VCM(Voice Coil Motor)音圈马达

VCM(Voice Coil Motor)音圈马达全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。弹片式结构滚珠式结构摩擦式结构Open loop开马达Close loop闭环马达。

图像学习之旅 7216

基于CPCC_S_TASK_LIST_MAINTAIN的工艺路线组件批量分配实战与避坑指南

本文详细解析了SAP PP模块中基于CPCC_S_TASK_LIST_MAINTAIN函数实现工艺路线组件批量分配的实战技巧与避坑指南。针对批量分配的核心挑战,提供了参数配置、BAPI协同使用、Excel导入等解决方案,并分享了大容量数据处理优化经验,帮助用户高效完成工艺路线组件分配任务。

weixin_33563728的博客 305

图像处理基础一(转)

第1章 Windows位图和调色板1.1 位图和调色板的概念如今Windows(3.x以及95,98,NT)系列已经成为绝大多数用户使用的操作系统,它比DOS成功的一个重要因素是它可视化的漂亮界面。那么Windows是如何显示图象的呢?这就要谈到位图(bitmap)。我们知道,普通的显示器屏幕是由许许多多点构成的,我们称之为象素。显示时采用扫描的方法:电子枪每次从左到右扫描一行,为每个象素着色,然

油条的专栏 2343

USB 3.0 高清音视频采集芯片——MS2130

MS2130 是一款 USB 3.0 高清视频和音频采集芯片,内部集成 USB3.0 Device 控制器、数据收发模块、音视频处理模块。

YOU_SeMi的博客 7858

BMP格式

BMP(全称Bitmap)是标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图象深度可选以外,不采用其他任何压缩。BMP文件的图像深度可选lbit、4bit、8bit及24bit。    NETC下面详细解说BMP图象格式,BMP解码及BMP在LCD显示程序! 一.BMP文件格式 1.位图文件头:14字节 2.位图信息头

WINC开发的专栏 4432

【100%通过率】华为od统一考试B卷【贪吃蛇】Python 实现

贪吃蛇是一个经典游戏,蛇的身体由若干方格连接而成,身体随蛇头移动。蛇头触碰到食物时,蛇的长度会增加一格。蛇头和身体的任一方格或者游戏版图边界碰撞时,游戏结束。 下面让我们来完成贪吃蛇游戏的模拟。给定一个N*M的数组arr,代表N*M个方格组成的版图,贪吃蛇每次移动一个方格。若arr[i][j] == ‘H’,表示该方格为贪吃蛇的起始位置;若arr[i][j] == ‘F’,表示该方格为食物,若arr[i][j] == ‘E’,表示该方格为空格。贪吃蛇初始长度为1,初始移动方向为向左。

MISAYAONE的博客 1204

C#量化交易的市场数据采集与分析:从0到1构建你的‘数据雷达’——对比5大神器,代码实战全解析!

数据是量化交易的‘氧气’,而好的数据采集与分析是你的‘呼吸机’!本文5大神器+代码实战,总有一款适合你!(本文代码均经过测试,但请根据实际需求调整!

java专栏 730

Linux LCD 显示图片

BMP和JPEG图形显示程序 1)  在LCD上显示BMP或JPEG图片的主流程图 首先,在程序开始前。要在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0。命令如下: mknod fb0 c 29 0 在LCD上显示图象的主流程图如图1所示。程序一开始要调用open函数打开设备,然后调用ioctl获取设备相关信息,接下来就是读取图形

niepangu的专栏 7835

点云从入门到精通技术详解100篇-基于三维点云的机器人抓取位姿检测(续)

集到的深度信息会存在噪点,因此需要将生成的场景点云进行预处理,获得平滑、降采样处理场景点云,本文设计的预处理操作更能从冗杂的场景点云中提取清晰、平滑的目标点云,便于后续的抓取位姿采样,提高后续算法的处理效率。因此需要对场景点云进行适当的分割,仅保留目标物体的点云,整个过程可以通过。场较小时,空间中的点云密度会更加提高;觉子系统的效率,再保持全局点云几何形状不改变的前提下,通过对目标点云进行。体素降采样可以快速地减少点云数据并同时保持点云的形。个点,由于我们实施抓取的目标物体只占整个场景点云图的一部分,

getusushu的博客 773

VC++中bmp图象的显示

转自:http://www.cnblogs.com/jjzhou1988/archive/2009/07/22/1347862.html 前段时间想用VC的对话框来动态地显示一副BMP位图,查了很多篇文章发现都写的很复杂(而且貌似许多都是复制粘贴而来),真正有价值的不多.其实VC显示BMP文件是很方便的,所有的代码加在一起也不过五六行而已.因而特此将自己的经验写上blog,希望能对需要的人有所帮

lanzily99的专栏 1022

SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案

本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。

baidu_35680696的博客 245

【OpenClaw从入门到精通】第26篇:从0到1构建OpenClaw二次发行版——企业专属AI平台实战指南(2026实测)

本文基于OpenClaw 2026.3.7开源内核,聚焦企业级AI平台的二次发行构建,从技术原理、实操流程到商业落地提供完整方法论。核心围绕“内核层-能力层-产品层”三层架构,详解源码编译、私有化部署、企业级特性开发(数据合规、国产化适配、业务系统集成)、产品化包装等关键步骤,并通过审计行业“智审助手”虚拟实战案例具象化落地路径。文章兼顾新手入门与进阶提升,提供可直接复用的代码、配置文件及执行结果,解决企业对AI Agent“开箱即用”“数据不出域”“业务适配”的核心诉求,助力开发者快速打造企业专属AI平台

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 711

BMP图象格式

BMP是bitmap的缩写形式,bitmap顾名思义,就是位图也即Windows位图。它一般由4部分组成:文件头信息块、图像描述信息块、颜色表(在真彩色模式无颜色表)和图像数据区组成。在系统中以BMP为扩展名保存。  打开Windows的画图程序,在保存图像时,可以看到三个选项:2色位图(黑白)、16色位图、256色位图和24位位图。这是最普通的生成位图的工具,在这里讲解的BMP位图形式,主要就是

cassper的专栏 1546

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

VC小技巧:窗体中显示bmp图象

虽然在高手看来这是垃圾问题,但对于我们这些菜鸟,这是很必须的.因为高手很不屑写这些的,我刚刚学会,为了挽救普天之下和我一样的菜鸟们,就写了这样一篇文章。   在vc中显示BMP并不象VB那么简单,用个loadpicture,什么格式全部ok,在vc中又需要做一些额外工作.我们用 SDI作示范。   新建一个SDI的工程,所有都是默认.打开资源编辑器,右键,import 选择图片导入.使用默

yingfox的专栏 1196

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC小技巧,窗体中显示bmp图象

 虽然在高手看来这是垃圾问题,但对于我们这些菜鸟,这是很必须的.因为高手很不屑写这些的我刚刚学会,为了挽救普天之下和我一样的菜鸟们,就写了这样一篇文章.在vc中显示BMP并不象VB那么简单,用个loadpicture,什么格式全部ok,在vc中又需要做一些额外工作.我们用 SDI作示范.新建一个SDI的工程,所有都是默认.打开资源编辑器,右键,import 选择图片导入.使用默认的ID不要尝试去编

mopish的专栏 988

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

关于bmp save图象颠倒解决方法

<br />      (thinkvd开发日志)在开发swf to video,保存bmp图时,刚好图象上下颠倒, 以前用了一个简单算法把图象数据倒过来,<br />在网上查了一下,据说有一个标志位,反复看了BITMAPFILEHEADER, BITMAPINFOHEADER结构,也没有发现是哪个变量。<br />后来想了想,把高度值变成相反值,结果图象还真的变成正立的了。<br />也就是设置BITMAPINFOHEADER中的info.biHeight取反即可。<br /><br /><br /><b

thinkvd dvd and video converter 6484
上一篇: javascript拖动(拖拽)之我见 - 简约版
下一篇: Struts 显示中文问题.
paste
博客等级 码龄21年 28粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值