 |
|
 |
Hello!
Do you have any useage terms or license associated with CBitmapDC? I'm interested in using this in my work, but I need to check with the legal team first to see if it's OK to use. Is it free to use and distribute with commercial products?
Thanks for your help!
Anna
|
|
|
|
 |
|
 |
hi
can u tell me, how to display a bitmap image into a dialog in vc++/mfc.
my id: senthil.ramani@gmail.com
thanks in advance.
v.senthil
|
|
|
|
 |
|
 |
Can I use it for printing purposes? My environement:
-- Map mode is MM_HIGHMETRIC
-- the y coordinates are inverted
As far as i know BitBlt works in pixels not in logical device units (0.01 mm in my case)
Why 6 is affraid of 7?
Because 7 8 9
|
|
|
|
 |
|
 |
Hi,
i try to modify the following codes to display only gray scale image.So far my program just display a blank bitmap.Anyone can please help me.i try so many ways for a few days but still cannot.
void CMy2ndtryView::OnDraw(CDC* pDC)
{
CMy2ndtryDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CDC MemDC;
MemDC.CreateCompatibleDC (NULL);
MemDC.SelectObject (&m_Bitmap);
pDC->BitBlt
(20,
20,
m_BitmapWidth,
m_BitmapHeight,
&MemDC,
0,
0,
SRCCOPY);
CDC resultDC;
CBitmap m_result;
m_result.CreateCompatibleBitmap(pDC,m_BitmapWidth,m_BitmapHeight);
resultDC.CreateCompatibleDC (NULL);
resultDC.SelectObject (&m_Bitmap);
for( int y = 0; y < m_BitmapHeight ; y++ )
{
for( int x = 0; x < m_BitmapWidth ; x++ )
{
//set pixel to color returned by convolve
resultDC.SetPixel(x,y,Convolve(&MemDC,x,y,kernel));
}
}
//Display Result
pDC->BitBlt
(300,
20,
m_BitmapWidth,
m_BitmapHeight,
&resultDC,
0,
0,
SRCCOPY);
}
COLORREF CMy2ndtryView::Convolve(CDC *pDC, int sourcex, int sourcey, float kernel[][3])
{
float rSum = 0, gSum = 0, bSum = 0, kSum = 0;
float grayscale =0;
COLORREF clrReturn = RGB(0,0,0);
for (int i=0; i <= 2; i++)//loop through rows
{
for (int j=0; j <= 2; j++)//loop through columns
{
COLORREF tmpPixel = pDC->GetPixel(sourcex+(i-(2>>1)),sourcey+(j-(2>>1)));
float fKernel = kernel[i][j];
rSum += (GetRValue(tmpPixel)*fKernel);
gSum += (GetGValue(tmpPixel)*fKernel);
bSum += (GetBValue(tmpPixel)*fKernel);
kSum += fKernel;
}
}
if (kSum <= 0)
kSum = 1;
rSum/=kSum;
gSum/=kSum;
bSum/=kSum;
if (rSum > 255)
rSum = 255;
else if (rSum < 0)
rSum = 0;
if (gSum > 255)
gSum = 255;
else if (gSum < 0)
gSum = 0;
if (bSum > 255)
bSum = 255;
else if (bSum < 0)
bSum = 0;
grayscale=0.299*rSum + 0.587*gSum + 0.114*bSum;
rSum=grayscale;
gSum=grayscale;
bSum=grayscale;
clrReturn = RGB(rSum,gSum,bSum);
return clrReturn;
}
Is there something with my formula for grayscale?
grayscale=0.299*rSum + 0.587*gSum + 0.114*bSum;
|
|
|
|
 |
|
 |
It may show how little I know about Bitmaps but this class is a real godsend. We have a large vector drawing to display and it takes forever, now we can generate a CBitmapDC copy of it and just BitBlt it instead.
Many thanks for this great idea
Phil
|
|
|
|
 |
|
 |
This code works in Windows CE (tested on the Pocket PC 2002) as long as you conditionally remove all references to SetMapMode() and GetMapMode().
#ifndef _WIN32_WCE
CDC::SetMapMode(pOrigDC->GetMapMode());
#endif
By the way: Great work!
Regards,
João Paulo
|
|
|
|
 |
|
 |
I need to draw lines and rectangles into a DC... and then I want to save it into a bitmap...I think this class will make my job very easy!!!
What do you think??
|
|
|
|
 |
|
 |
CMemDC is easily extended to do this.
|
|
|
|
 |
|
 |
I want save bitmapDC to BMP
|
|
|
|
 |
|
 |
bool SaveBitmap(const CDC &DC, const CString &filename)
{
// Get bitmap that is currently selected in DC.
CBitmap *pBitmap = DC.GetCurrentBitmap();
// Create a temporary bitmap compatible with client DC
CClientDC clientDC(::AfxGetMainWnd());
CBitmap TmpBitmap;
TmpBitmap.CreateCompatibleBitmap(&clientDC, 2, 2);
// Replace the bitmap in the DC, even though the DC is const.
CDC& ncDC = const_cast(DC);
ncDC.SelectObject(TmpBitmap);
// Save the bitmap that is now deselected from the DC.
bool res = SaveBitmap(*pBitmap, filename);
// Select the bitmap in the DC again.
ncDC.SelectObject(pBitmap);
return res;
}
bool SaveBitmap(const CBitmap &Bitmap, const CString &filename)
{
CDIBSectionLite dibsection;
dibsection.SetBitmap(HBITMAP(Bitmap.GetSafeHandle()));
return dibsection.Save(filename) == TRUE;
}
The CDIBSectionLite class can also be found on the CodeProject website.
|
|
|
|
 |
|
 |
This is wrong:
CDC& ncDC = const_cast(DC);
And should be
CDC& ncDC = const_cast(DC);
|
|
|
|
 |
|
 |
Anonymous wrote:
This is wrong:
CDC& ncDC = const_cast(DC);
And should be
CDC& ncDC = const_cast(DC);
I don't see the difference in the wrong and the right line!
|
|
|
|
 |
|
 |
I agree that there is no differance in the right and wrong code, however I had a problem compiling the code at this line and I think it should be.
CDC& ncDC = const_cast(DC);
If I am wrong please correct me. But it does now compile.
|
|
|
|
 |
|
 |
I can now see the problem, it has lost some of the code i posted, as I think happened to the original post.
I will try to clarify
should be "CDC& ncDC = const_cast" then "" then "(DC);"
The bit in the middle should read, "Less then symbol CDC Ampersand symbol Greater then symbol"
I will try the whole line in quotes, i think it is because it treats it as an HTML tag.
should be "CDC& ncDC = const_cast(DC);"
hope this helps.
|
|
|
|
 |
|
 |
What about this:
CDC& ncDC = const_cast<CDC&>(DC);
|
|
|
|
 |
|
 |
Thanks a lot for your quite usefule code and suggestion.
Well i was fixed up in how to convert the CDC content to Bmp file. well this code piece does solve the problem
Can you help me in understand the code
NOTE:
My bmp file is taking 2/3 rd part of page only
My dimensions of bmp are 860*1100
I am using ImageHandler library to convert the cdc to JPEG , here also i pass CDC only and it makes jpeg which takes complete page.
Well can you help me out to make the bitmap file also filling up the complete page
Thanks again
Leave your mark wherever you go
|
|
|
|
 |