热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bmp编辑c语言,bmp文件大小C语言

本文目录一览:1、C语言编写程序显示bmp文件

本文目录一览:


  • 1、C语言编写程序显示bmp文件


  • 2、如何用C语言编程来显示一个bmp文件


  • 3、如何用C语言在已有的bmp图片上添加文字生成新的图片?

C语言编写程序显示bmp文件

BOOL BitBlt(

  HDC hdcDest, // 位图显示目标设备环境中

  int nXDest,  // 位图显示在客户区的x坐标

  int nYDest,  // 位图显示在客户区的y坐标

  int nWidth,  // 位图显示的宽度

  int nHeight, // 位图显示的长度

  HDC hdcSrc,  // 源设备环境(包含需要显示的bmp位图)

  int nXSrc,   // 在当前位图中显示的开始x位置

  int nYSrc,   // 在当前位图中显示的开始y位置

  DWORD dwRop  // 映射模式

);

//显示bmp位图

#includewindows.h

#include"resource.h"

 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void DrawBrick(); 

 

int WINAPI WinMain(HINSTANCE hInstance,

                   HINSTANCE hPrevInstance,

                   PSTR szCmdLine,

                   int iCmdShow)

{

    static  TCHAR   szAppName[] = TEXT("Bmp");

    HWND            hwnd;

    MSG             msg;

    WNDCLASS        wndclass;

     

    wndclass.style          = CS_HREDRAW | CS_VREDRAW;

    wndclass.lpfnWndProc    = WndProc;

    wndclass.cbClsExtra     = 0;

    wndclass.cbWndExtra     = 0;

    wndclass.hInstance      = hInstance;

    wndclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);

    wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);

    wndclass.hbrBackground  = (HBRUSH)GetStockObject(WHITE_BRUSH);

    wndclass.lpszMenuName   = NULL;

    wndclass.lpszClassName  = szAppName;

     

    if(!RegisterClass(wndclass))

    {

        MessageBox(NULL, TEXT("This program requires Windows NT!"),

            szAppName, MB_ICONERROR);

        return 0;

    }

     

    hwnd = CreateWindow(szAppName,

                        TEXT("Bmp Demo"),

                        WS_OVERLAPPEDWINDOW,

                        CW_USEDEFAULT,

                        CW_USEDEFAULT,

                        754,

                        566,

                        NULL,

                        NULL,

                        hInstance,

                        NULL);

     

    ShowWindow(hwnd, iCmdShow);

    UpdateWindow(hwnd);

     

    while(GetMessage(msg, NULL, 0, 0))

    {

        TranslateMessage(msg);

        DispatchMessage(msg);

    }

     

    return msg.wParam;

}

 

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

    static  HBITMAP hBitmap;            //位图句柄  标示位图

    static int     cxBitmap, cyBitmap;    //位图的长宽

    BITMAP          bitmap;

    HDC             hdc, hdcMem;

    HINSTANCE       hInstance;

    PAINTSTRUCT     ps;

     

    switch(message)

    {

    case WM_CREATE:

        hInstance = ((LPCREATESTRUCT)lParam)-hInstance;               //获取窗口的实例句柄

         

        hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BITMAP1));   //将位图加载到内存中

         

        GetObject(hBitmap, sizeof(BITMAP), bitmap);

         

        cxBitmap = bitmap.bmWidth;//获取位图的长

        cyBitmap = bitmap.bmHeight;//获取位图的宽

 

        return 0 ;

         

    case WM_PAINT:

        hdc = BeginPaint(hwnd, ps);

         

        hdcMem = CreateCompatibleDC(hdc);//创建一个兼容于hdc设备环境描述表的hdcMem  主要是用于在内存中截图

        SelectObject(hdcMem, hBitmap);   //将位图选到hdcMem中

 

        BitBlt(hdc, -1, -1, cxBitmap, cyBitmap, hdcMem, 0, 0, SRCCOPY);//绘制bmp位图

 

        DeleteDC(hdcMem);

        EndPaint(hwnd, ps);

 

        return 0;

 

    case WM_DESTROY:

        DeleteObject(hBitmap);

        PostQuitMessage(0);

 

        return 0;

    }

     

    return DefWindowProc(hwnd, message, wParam, lParam);

}

最好在VC中编译

如何用C语言编程来显示一个bmp文件

直接上代码吧:

#include Windows.h

#include stdio.h

#include string.h

#include malloc.h

unsigned char *pBmpBuf;//读入图像数据的指针

int bmpWidth;//图像的宽

int bmpHeight;//图像的高

RGBQUAD *pColorTable;//颜色表指针

int biBitCount;//图像类型,每像素位数

bool readBmp(char *bmpName)

{

//二进制读方式打开指定的图像文件

FILE *fp=fopen(bmpName,"rb");

if(fp==0) return 0;

//跳过位图文件头结构BITMAPFILEHEADER

fseek(fp, sizeof(BITMAPFILEHEADER),0);

//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中

BITMAPINFOHEADER head;

fread(head, sizeof(BITMAPINFOHEADER), 1,fp);

//获取图像宽、高、每像素所占位数等信息

bmpWidth = head.biWidth;

bmpHeight = head.biHeight;

biBitCount = head.biBitCount;

//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)

int lineByte=(bmpWidth * biBitCount/8+3)/4*4;

//灰度图像有颜色表,且颜色表表项为256

if(biBitCount==8){

//申请颜色表所需要的空间,读颜色表进内存

pColorTable=new RGBQUAD[256];

fread(pColorTable,sizeof(RGBQUAD),256,fp);

}

//申请位图数据所需要的空间,读位图数据进内存

pBmpBuf=new unsigned char[lineByte * bmpHeight];

fread(pBmpBuf,1,lineByte * bmpHeight,fp);

//关闭文件

fclose(fp);

return 1;

}

bool saveBmp(char *bmpName, unsigned char *imgBuf, int width, int height,

int biBitCount, RGBQUAD *pColorTable)

{

//如果位图数据指针为0,则没有数据传入,函数返回

if(!imgBuf)

return 0;

//颜色表大小,以字节为单位,灰度图像颜色表为1024字节,彩色图像颜色表大小为0

int colorTablesize=0;

if(biBitCount==8)

colorTablesize=1024;

//待存储图像数据每行字节数为4的倍数

int lineByte=(width * biBitCount/8+3)/4*4;

//以二进制写的方式打开文件

FILE *fp=fopen(bmpName,"wb");

if(fp==0) return 0;

//申请位图文件头结构变量,填写文件头信息

BITMAPFILEHEADER fileHead;

fileHead.bfType = 0x4D42;//bmp类型

//bfSize是图像文件4个组成部分之和

fileHead.bfSize= sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)

+ colorTablesize + lineByte*height;

fileHead.bfReserved1 = 0;

fileHead.bfReserved2 = 0;

//bfOffBits是图像文件前3个部分所需空间之和

fileHead.bfOffBits=54+colorTablesize;

//写文件头进文件

fwrite(fileHead, sizeof(BITMAPFILEHEADER),1, fp);

//申请位图信息头结构变量,填写信息头信息

BITMAPINFOHEADER head;

head.biBitCount=biBitCount;

head.biClrImportant=0;

head.biClrUsed=0;

head.biCompression=0;

head.bi);

scanf("%s",inFileName);

printf("请输入加密程序产生的新位图文件的文件名:");

scanf("%s",outFileName);

//读入指定BMP文件进内存

readBmp(inFileName);

//输出图像的信息

printf(",bmpWidth,bmpHeight, biBitCount);

//将图像数据存盘

saveBmp(outFileName, pBmpBuf, bmpWidth, bmpHeight, biBitCount, pColorTable);

//清除缓冲区,pBmpBuf和pColorTable是全局变量,在文件读入时申请的空间

delete []pBmpBuf;

if(biBitCount==8)

delete []pColorTable;

return 0;

}

如何用C语言在已有的bmp图片上添加文字生成新的图片?

用C语言在已有的bmp图片上添加文字生成新的图片方法是:

1、首先要了解位图文件的结构和熟悉C语言的画图函数等基层知识,这些知识可以在网上找到自学;

2、BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大,BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序,由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式,图像中每个像素的颜色值都保存在BMP文件中。

3、C语言是一种计算机程序设计语言,它既有高级语言的特点,又具有汇编语言的特点,它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序,因此,它的应用范围广泛,

用C语言显示BMP图片,最直接的方法就是先将每个像素的颜色值提取出来,再用C语言的画图函数画。


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
和谐啄木鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有