[各位][图片][格式]求助:各位大哥请帮我看看这个图片格式的问题啊谢谢!
09月 11th, 2008 by admin
Posted in VC/MFC | No Comments »
请帮我看看这个问题啊
我从摄像头可以得到
MEDIASUBTYPE_RGB1 2色,每个像素用1位表示,需要调色板
MEDIASUBTYPE_RGB4 16色,每个像素用4位表示,需要调色板
MEDIASUBTYPE_RGB8 256色,每个像素用8位表示,需要调色板
MEDIASUBTYPE_RGB565 每个像素用16位表示,RGB分量分别使用5位、6位、5位
MEDIASUBTYPE_RGB555 每个像素用16位表示,RGB分量都使用5位(剩下的1位不用)
MEDIASUBTYPE_RGB24 每个像素用24位表示,RGB分量各使用8位
MEDIASUBTYPE_RGB32 每个像素用32位表示,RGB分量各使用8位(剩下的8位不用)
MEDIASUBTYPE_ARGB32 每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)
游戏引擎需要的是
D3DFMT_ARGB32(D3DFMT_A8R8G8B8)
1:
MEDIASUBTYPE_ARGB32 和 D3DFMT_ARGB32 是不是一样的?
2:
如果不是一样的
我的摄像头最好选
MEDIASUBTYPE_RGB1 2色,每个像素用1位表示,需要调色板
MEDIASUBTYPE_RGB4 16色,每个像素用4位表示,需要调色板
MEDIASUBTYPE_RGB8 256色,每个像素用8位表示,需要调色板
MEDIASUBTYPE_RGB565 每个像素用16位表示,RGB分量分别使用5位、6位、5位
MEDIASUBTYPE_RGB555 每个像素用16位表示,RGB分量都使用5位(剩下的1位不用)
MEDIASUBTYPE_RGB24 每个像素用24位表示,RGB分量各使用8位
MEDIASUBTYPE_RGB32 每个像素用32位表示,RGB分量各使用8位(剩下的8位不用)
MEDIASUBTYPE_ARGB32 每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)
中的哪一个?
3:
怎么转换为 D3DFMT_ARGB32 ?
谢谢!
谢谢大哥
好象不行
我显示出来,都是乱的!
//MEDIASUBTYPE_ARGB32;
A8 在最后面
//D3DFMT_A8R8G8B8
A8 在最前面
现在
BYTE * pBuffer;
pSample->GetPointer(&pBuffer); //得到数据
long lBufferSize = pSample->GetSize(); //长度
//——-把MEDIASUBTYPE_ARGB32格式转换为D3DFMT_A8R8G8B8————————–
BYTE * pBuffer2;
pBuffer2 = new BYTE[lBufferSize];
//那么就是把 pBuffer 的 第 4 个,拿到 pBuffer2 的第一个
for(int i = 0; i < lBufferSize; i ++)
{
}
//———把MEDIASUBTYPE_ARGB32格式转换为D3DFMT_A8R8G8B8————————–
这样的,用程序怎么才能表达出来?
谢谢!
[各位][user][breakpoint]各位大虾帮帮忙吧出现这种问题了user breakpoint called from code at 0×7c921230
08月 28th, 2008 by admin
Posted in VC/MFC | No Comments »
我在一个函数中
int Image_width=384;
int Image_height=216;
unsigned char *RGB= new unsigned char [Image_width*Image_height*3];
其中没有做太复杂的操作就是对RGB这个数据进行了一些运算,最后的时候
delete [] RGB;
这时就出错了,就出现user breakpoint called from code at 0×7c921230这句话,但
奇怪的是我用两个不同的输入文件来做,一个就是好的,另外一个就会出错,这可能是什么原因呢?困扰中!!!!
好的,我先试一下,谢谢。
好像不可以呢,我根据在网上找到的信息是这样激活page heap 的
C:Debuggerspageheap>pageheap /enable mytest.exe /full
mytes.exe,是我程序的名称,但运行后显示这样
C:Debuggers 引用了一个不可用的位置。
我接下来该怎么办呢,晕了
两种可能性,一是RGB这个指针变了,可以前后用%p打印出来比较一下,二是越界访问了RGB所指向的地址前面的部分的内存,把保存该部分内存大小的地址数据覆盖了,导致释放时出错,可以在起初打开内存窗口,把地址定位到RGB所指向的地址前面16个字节左右的地方,然后在delete前设断点,F5看看前面那几个内存有没有变红就知道了。
我按照楼上说的试过了,RGB地址没有改变,而且也没有覆盖掉其前面的数据,
出错的那个位图不是24位位图,还是宽度不是4的倍数?
都不是,输入文件都是好的,我把 delete [] RGB去掉以后,
程序可以继续执行,但是执行到某处new 的时候,又会出现相同的问题,
我觉得是我程序中某处内存泄漏了,才会导致后面的问题。
问题解决了,是我自己太粗心,在RGB的操作过程中出现了越界情况。
多谢各位了。
估计是越界了,或者是修改了RGB指针
[新手上路][各位][指教]新手上路请各位高手指教
08月 23rd, 2008 by admin
Posted in VC/MFC | No Comments »
我的MFC在设置好所有控件后只能显示出部分。。。求救,急问。。请大侠帮忙][/img]
不会吧,什么叫显示部分,到不知道你添加的什么控件?
图片发不上来,我添加了几个botton控件和edit控件, 还有一个combox控件。就是有一部分控件在编译后能够在运行程序的时候显示出来,有一部分不行。botton控件都可以使用,edit控件有三个可以三个不行,combox不能使用。比较奇怪的是edit的设置都是使用的en_update消息,内在程序都还没有编我就试了一下但是有写控件可以显示有些不能显示。非常感谢。
你的对话框的id在你添加不会显示的控件以前你修改了 把
[各位][大老][界面]各位大老!!!! C++界面问题
08月 22nd, 2008 by admin
Posted in VC/MFC | No Comments »
各位老大们,VC窗口界面中如何设置各个控件的tab键功能!就是用户可以不使用鼠标就能完成操作。
不明白你说什么?是用tab键切换控件?如果是对话框,选中tab stop属性为true就行了;如果是非对话框类,需要自己处理,切换焦点。
在VC中编辑对话框的界面中,使用快捷键ctrl + d
这时候你会看到每个控件上都会标记出数字,按顺序用鼠标点击,然后就会按你点击的顺序来布置tab order了
好的,谢谢了!!!非常感谢!!!!
[各位][高人][图像]各位高人:我的一幅图像亮度不均匀怎么办啊
08月 21st, 2008 by admin
Posted in VC/MFC | No Comments »
我的一幅图像亮度不均匀,一块亮一块暗的,怎么把它弄均匀了。。。
硬件方面,改进光源 成本不高的化,可以考虑
软件方面,直方图均衡化
RGB图像怎么做直方图均衡呢??
[菜鸟][各位][帮助]菜鸟的问题希望各位大哥大姐能帮助一下! 简单计算器(+-*/)设计中编译连接都没问题就是运行不出结果!
08月 21st, 2008 by admin
Posted in VC/MFC | No Comments »
运行是,出现如下错误:
Debud Aeeertion Failed!
Program: E:******** ¦Debug计算器。exe
File: winocc.cpp
Line:239
For information on how your program can cause an assertion failure ,see
the Visual C++ documenttation on asserts.
(Press Retry to debug the application)
终止(A) 重试(R) 忽略(I)
实现文件如下:(便宜,连接都没错误,运行时不出结果)
// 计算器Dlg.cpp : implementation file
//
#include "stdafx.h"
#include "计算器.h"
#include "计算器Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
m_Result_Edit = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
DDX_Control(pDX, IDC_ITEM2_EDIT, m_Item2_Edit);
DDX_Text(pDX, IDC_RESULT_EDIT, m_Result_Edit);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton)
ON_BN_CLICKED(IDC_CLEAR_BUTTON, OnClearButton)
ON_BN_CLICKED(IDC_DEVIDE_BUTTON, OnDevideButton)
ON_BN_CLICKED(IDC_DIFFERENCE_BUTTON, OnDifferenceButton)
ON_BN_CLICKED(IDC_EXIT_BUTTON, OnExitButton)
ON_BN_CLICKED(IDC_MULTIPLY_BUTTON, OnMultiplyButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About…" menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMyDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMyDlg::OnAddButton()
{
char cstrItem1[10],cstrItem2[10];
double dfItem1,dfItem2,dfResult;
char cBuffer[50];
m_Item1_Edit.GetWindowText(cstrItem1,10);
m_Item2_Edit.GetWindowText(cstrItem2,10);
dfItem1=atof((LPCTSTR)cstrItem1);
dfItem2=atof((LPCTSTR)cstrItem2);
dfResult=dfItem1+dfItem2;
_gcvt(dfResult,10,cBuffer);
m_Result_Edit=(LPCTSTR)cBuffer;
UpdateData(FALSE);
}
void CMyDlg::OnDifferenceButton()
{
char cstrItem1[10],cstrItem2[10];
double dfItem1,dfItem2,dfResult;
char cBuffer[50];
m_Item1_Edit.GetWindowText(cstrItem1,10);
m_Item2_Edit.GetWindowText(cstrItem2,10);
dfItem1=atof((LPCTSTR)cstrItem1);
dfItem2=atof((LPCTSTR)cstrItem2);
dfResult=dfItem1-dfItem2;
_gcvt(dfResult,10,cBuffer);
m_Result_Edit=(LPCTSTR)cBuffer;
UpdateData(FALSE);
}
void CMyDlg::OnMultiplyButton()
{
char cstrItem1[10],cstrItem2[10];
double dfItem1,dfItem2,dfResult;
char cBuffer[50];
m_Item1_Edit.GetWindowText(cstrItem1,10);
m_Item2_Edit.GetWindowText(cstrItem2,10);
dfItem1=atof((LPCTSTR)cstrItem1);
dfItem2=atof((LPCTSTR)cstrItem2);
dfResult=dfItem1*dfItem2;
_gcvt(dfResult,10,cBuffer);
m_Result_Edit=(LPCTSTR)cBuffer;
UpdateData(FALSE);
}
void CMyDlg::OnDevideButton()
{
char cstrItem1[10],cstrItem2[10];
double dfItem1,dfItem2,dfResult;
char cBuffer[50];
m_Item1_Edit.GetWindowText(cstrItem1,10);
m_Item2_Edit.GetWindowText(cstrItem2,10);
dfItem1=atof((LPCTSTR)cstrItem1);
dfItem2=atof((LPCTSTR)cstrItem2);
dfResult=dfItem1/dfItem2;
_gcvt(dfResult,10,cBuffer);
m_Result_Edit=(LPCTSTR)cBuffer;
UpdateData(FALSE);
}
void CMyDlg::OnClearButton()
{
m_Item1_Edit.SetSel(0,-1);
m_Item1_Edit.ReplaceSel("");
m_Item2_Edit.SetSel(0,-1);
m_Item2_Edit.ReplaceSel("");
m_Result_Edit="";
UpdateData(FALSE);
}
void CMyDlg::OnExitButton()
{
OnOK();
}
_gcvt(dfResult,10,cBuffer);
m_Result_Edit=(LPCTSTR)cBuffer;
改成如下就OK了:
CString cRueslt;
cRueslt.Format("%f",dfResult);
m_r.SetWindowText(cRueslt)//注m_r和m_Item1_Edit和m_Item2_Edit的定义方法一样,这个估计就是出错的原因!
如果找不到CString 可以在stdafx.h中加上#include <afx.h>就行了
帮你改一个函数,其他的你自己改:
void CMyDlg::OnAddButton()
{
char cstrItem1[10],cstrItem2[10]; //定义了长度为10的字符数组
double dfItem1,dfItem2,dfResult;
char cBuffer[50];
m_Item1_Edit.GetWindowText(cstrItem1,9); //所以在这里不能取10个,要保留最后一个,用来存放字符串结束符'