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

如何在控件上绘制已经定义好的BITMAP结构数据

希望实现的程序功能主要是读取一个tga文件并转换文件信息到BITMAP结构中。现在我已经把TGA格式数据转换到BITMAP结构中了,但是在空间上看不到绘制结果。绘制方法:voidCPreView
希望实现的程序功能主要是读取一个tga文件并转换文件信息到BITMAP结构中。现在我已经把TGA格式数据转换到BITMAP结构中了,但是在空间上看不到绘制结果。绘制方法:
void CPreViewDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here  
CPoint pt;
CSize size;

CRect   rect;   
GetClientRect(rect);   

bitmap.CreateBitmapIndirect(&m_bmpColor);
pt.x = 0;
pt.y = 0;
size.cx = rect.Width();
size.cy = rect.Height();
dc.DrawState(pt,size,&bitmap,DST_BITMAP);
// Do not call CDialog::OnPaint() for painting messages
}
其中m_bmpColor是已经定义过了的BITMAP结构。

如果调用资源里的Bitmap位图就可以显示。
void CPreViewDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here

CPoint pt;
CSize size;
        BITMAP Color;
CBitmap   bitmap;   
CRect   rect;   
GetClientRect(rect);   
bitmap.LoadBitmap(IDB_BITMAP2);

bitmap.GetBitmap(&Color);

pt.x = 0;
pt.y = 0;
size.cx = rect.Width();
size.cy = rect.Height();
dc.DrawState(pt,size,&bitmap,DST_BITMAP);
// Do not call CDialog::OnPaint() for painting messages
}

希望能得到解答

9 个解决方案

#1


现在我已经把TGA格式数据转换到BITMAP结构中了,但是在空间上看不到绘制结果。
===============================
BITMAP结构只是一个结构,它里面记录了位图的一些格式,但是这里面并不含有位图的图像数据,当然画不出来,就像你知道一幅画的长度,大小,色深,你能将这个画还原出来吗?你下面的代码能成功是因为这一句:bitmap.LoadBitmap(IDB_BITMAP2); 它将资源中的位图加载进来了。

#2


BITMAP.bmBits不是存储位图图像数据的么?
如果这种方式不对,那我应该怎么做才能正确的把图像数据显示出来?

谢谢

#3


BITMAP.bmBits不是存储位图图像数据的么? 
==============
这不过是一个指向位图数据的指针,它指向一个数组,数组里面放着位图数据,不过,这个数组的内容要你自己放进去的。

#4


问题就是我已经制定了数组,还是显示不出来
//Color
ImageColor.bmHeight = nHight;
ImageColor.bmWidth = nWidth;
ImageColor.bmBitsPixel = 24;
ImageColor.bmPlanes = 1;
ImageColor.bmType = 0;
ImageColor.bmWidthBytes = nWidth * 3;
if((ImageColor.bmWidthBytes % 2) != 0)
{
ImageColor.bmWidthBytes += 1;
}

nBmpDatasize = ImageColor.bmWidthBytes * ImageColor.bmHeight;

for(int IndexHight = 0;IndexHight < nHight;IndexHight++)
{
BmpIndex = (long)IndexHight * ImageColor.bmWidthBytes;

for(int IndexWidth = 0;IndexWidth < nWidth;IndexWidth++)
{
fTgaRead.Read(p8Bitbuf,1);//r
pImagedata[BmpIndex] = p8Bitbuf[0];

fTgaRead.Read(p8Bitbuf,1);//g
pImagedata[BmpIndex+1] = p8Bitbuf[0];

fTgaRead.Read(p8Bitbuf,1);//b
pImagedata[BmpIndex+2] = p8Bitbuf[0];

BmpIndex+=3;
}
}

#5


不好意思少了一段
//Color
ImageColor.bmHeight = nHight;
ImageColor.bmWidth = nWidth;
ImageColor.bmBitsPixel = 24;
ImageColor.bmPlanes = 1;
ImageColor.bmType = 0;
ImageColor.bmWidthBytes = nWidth * 3;
if((ImageColor.bmWidthBytes % 2) != 0)
{
ImageColor.bmWidthBytes += 1;
}

nBmpDatasize = ImageColor.bmWidthBytes * ImageColor.bmHeight;


ImageColor.bmBits = new char[nBmpDatasize];
char * pImagedata = (char *)ImageColor.bmBits;

#6


dc.DrawState(pt,size,&bitmap,DST_BITMAP); 
===================
你这里的bitmap是什么啊,按MSDN上说,这应该是HBITMAP,是一个句柄,并不是BITMAP结构啊。

#7


CBitmap  bitmap; 是类CBitmap

#8


没人人知道问题是出在哪里么?

#9


if(MemDC==NULL)
   MemDC=::CreateCompatibleDC(NULL);
   hBitmap=::CreateDIBSection(MemDC,ImageColor,DIB_RGB_COLORS,(VOID**)&m_pBits,NULL,0);
if(hBitmap!=0)
{
hOldbmp=(HBITMAP)SelectObject(MemDC,hBitmap);
}
m_pBits=(byte*)pImagedata
Bitblt(显示的设备,0,0,width,height,memdc,0,0,srccopy);
这个代码不一定通过 但是原理是这样的 你都知道了DIB 所有数据 那就用CreateDIBSection创建一个BITMAP 然后把他选入内存 再用bitblt贴到你要显示的DC上 就可以了

推荐阅读
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 本篇文章笔者在上海吃饭的时候突然想到的这段时间就有想写几篇关于返回系统的笔记,所以回家到之后就奋笔疾书的写出来发布了事先在网上找了很多方法,发现有 ... [详细]
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社区 版权所有