|
I am printing images (using Visual C++, MFC application) but they're too small, or too clear. What is going on?
|
|
|
|
|
Check out the printing code in this sample (CImgViewerView::OnPrepareDC() in ImgViewerView.cpp).
|
|
|
|
|
Any idea, how can I ROTATE 90, 180 etc using an IPicture object, once it is loaded and showing on screen...
Thanks
Alex
|
|
|
|
|
How to get image's data (pixels value) directly from the IPicture object.
Thanks.
|
|
|
|
|
I wrote a code look like this to use in my little work. Its duty is
1. Load BMP image as resource by LoadBitmap function (4 images)
2. Shows one image on screen
3. Make some change by using the images
4. Show result
Every thing works well(But it is very slow when run). However after I changed the code by adding WriteDIB() (I want to save the result image into file) and compiled it, it can perform on its duty except for sainge the file(there is notthing happen). The program still run without any error.
////////////////////////////////////////////////////////////////////
// Invert.cpp
#include <afxwin.h>
#include <math.h>
#include "resource.h"
struct pixel{
public: // datamembers
BYTE red, green, blue;
};
class CMyWinApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};
class CMyFrameWnd : public CFrameWnd
{
private:
CBitmap m_bmSource0D, m_bmSource4D, m_bmSource8D, m_bmSource12D, m_bmSourceMask;
CDC m_dcSource0D, m_dcSource4D, m_dcSource8D, m_dcSource12D, m_dcSourceMask;
CDC m_dcOffScreen;
BITMAP m_bmp;
COLORREF m_crC0D, m_crC4D, m_crC8D, m_crC12D, m_crCMask, m_crCOut; // Pixel Color
BYTE m_nR; // Red
BYTE m_nG; // Green
BYTE m_nB; // Blue
int Id, Id1, Id2, Id3, Id4;
int m_nX;
int m_nY;
double phi;
public:
CBitmap m_bmOffScreen;
public:
BOOL WriteDIB(HBITMAP hBitmap);
double FindArctan2Reverse(double upper, double lower);
double FindArctan2(double upper, double lower);
double FindArctan(double upper, double lower);
double checkdirection(double direct);
CMyFrameWnd();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnPaint();
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
BOOL CMyWinApp::InitInstance()
{
m_pMainWnd = new CMyFrameWnd();
m_pMainWnd->ShowWindow(SW_MAXIMIZE);
m_pMainWnd->UpdateWindow();
return TRUE;
}
CMyFrameWnd::CMyFrameWnd()
{
Create(NULL, "Invert", WS_POPUPWINDOW | WS_CAPTION, CRect(0, 0, 512, 480));
CenterWindow(NULL);
}
afx_msg int CMyFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CPaintDC dc(this);
// Source0D
m_bmSource0D.LoadBitmap(IDB_BITMAP0D);
m_dcSource0D.CreateCompatibleDC(&dc);
m_dcSource0D.SelectObject(&m_bmSource0D);
// Source4D
m_bmSource4D.LoadBitmap(IDB_BITMAP4D);
m_dcSource4D.CreateCompatibleDC(&dc);
m_dcSource4D.SelectObject(&m_bmSource4D);
// Source8D
m_bmSource8D.LoadBitmap(IDB_BITMAP8D);
m_dcSource8D.CreateCompatibleDC(&dc);
m_dcSource8D.SelectObject(&m_bmSource8D);
// Source12D
m_bmSource12D.LoadBitmap(IDB_BITMAP12D);
m_dcSource12D.CreateCompatibleDC(&dc);
m_dcSource12D.SelectObject(&m_bmSource12D);
// SourceMask
m_bmSourceMask.LoadBitmap(IDB_BITMAPMASK);
m_dcSourceMask.CreateCompatibleDC(&dc);
m_dcSourceMask.SelectObject(&m_bmSourceMask);
// Off-Screen
m_bmOffScreen.LoadBitmap(IDB_BITMAP0D);
m_dcOffScreen.CreateCompatibleDC(&dc);
m_dcOffScreen.SelectObject(m_bmOffScreen);
m_bmSource0D.GetBitmap(&m_bmp);
return 0;
}
afx_msg void CMyFrameWnd::OnPaint()
{
CPaintDC dc(this);
dc.BitBlt(0, 0, m_bmp.bmWidth, m_bmp.bmHeight, &m_dcOffScreen, 0, 0, SRCCOPY);
}
afx_msg void CMyFrameWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
const double pi = 3.1416;
for (m_nY = 0; m_nY < m_bmp.bmHeight; m_nY++)
{
for (m_nX = 0; m_nX < m_bmp.bmWidth; m_nX++)
{
if(m_crCMask = m_dcSourceMask.GetPixel(m_nX, m_nY) == 0x000000)
{
m_nR = 0x62;
m_nG = 0x6E;
m_nB = 0x69;
m_crCOut = m_nR + (m_nG << 8) + (m_nB << 16);
m_dcOffScreen.SetPixel(m_nX, m_nY, m_crCOut);
}
else
{
m_crC0D = m_dcSource0D.GetPixel(m_nX, m_nY);
m_crC4D = m_dcSource4D.GetPixel(m_nX, m_nY);
m_crC8D = m_dcSource8D.GetPixel(m_nX, m_nY);
m_crC12D = m_dcSource12D.GetPixel(m_nX, m_nY);
Id1 = GetBValue(m_crC0D);
Id2 = GetBValue(m_crC4D);
Id3 = GetBValue(m_crC8D);
Id4 = GetBValue(m_crC12D);
double numerator = Id1 - Id3;
double denominator = Id2 - Id4;
phi = (pi/8) - 0.25 * FindArctan(numerator, denominator);
checkdirection(phi);
int m_nConvertToGrayScale = (int)((phi * 500 / pi) + 0.5);
if(m_nConvertToGrayScale > 255) m_nConvertToGrayScale = 255;
if(m_nConvertToGrayScale < 0) m_nConvertToGrayScale = 0;
m_nR = m_nConvertToGrayScale;
m_nG = m_nConvertToGrayScale;
m_nB = m_nConvertToGrayScale;
m_crCOut = m_nR + (m_nG << 8) + (m_nB << 16);
m_dcOffScreen.SetPixel(m_nX, m_nY, m_crCOut);
}
}
}
m_dcSource0D.BitBlt(0, 0, m_bmp.bmWidth, m_bmp.bmHeight, &m_dcOffScreen, 0, 0, SRCCOPY);
RedrawWindow(NULL, NULL, RDW_INVALIDATE);
}
CMyWinApp MyWinApp;
double CMyFrameWnd::checkdirection(double direct)
{
const double pi = 3.1416;
if(Id3 < Id1 && Id3 < Id2 && Id3 < Id4)
{
if(Id4 < Id2)
direct = direct + (pi / 4);
}
else if(Id4 < Id1 && Id4 < Id2 && Id4 < Id3)
{
direct = direct + (pi / 4);
}
else
{
direct = direct;
}
return direct;
}
double CMyFrameWnd::FindArctan(double upper, double lower)
{
double fraction = upper / lower;
double resultatan = atan(fraction);
return resultatan;
}
afx_msg void CMyFrameWnd::OnRButtonUp(UINT nFlags, CPoint point)
{
CBitmap m_bmpbuff;
pixel m_pBmp;
m_bmpbuff.CreateBitmapIndirect(&m_bmp);
for (m_nY = 0; m_nY < m_bmp.bmHeight; m_nY++)
{
for (m_nX = 0; m_nX < m_bmp.bmWidth; m_nX++)
{
m_pBmp.red = 123;
m_pBmp.green = 123;
m_pBmp.blue = 123;
m_bmpbuff.SetBitmapBits(sizeof(pixel), &m_pBmp);
}
}
HBITMAP hBmp = (HBITMAP)m_bmpbuff;
WriteDIB(hBmp);
}
BOOL CMyFrameWnd::WriteDIB(HBITMAP hBitmap)
{
BITMAPFILEHEADER bmphdr;
LPBITMAPINFOHEADER bmpInfo;
if (!hBitmap)
return FALSE;
CString szFile;
szFile = "PSD";
CFile file;
if(!file.Open(szFile, CFile::modeWrite|CFile::modeCreate))
AfxMessageBox("Not Done Save");
return FALSE;
bmpInfo = (LPBITMAPINFOHEADER)hBitmap;
int nColors = 1 << bmpInfo->biBitCount;
// Fill in the fields of the file header
bmphdr.bfType = ((WORD) ('M' << 8) | 'B'); // is always "BM"
bmphdr.bfSize = GlobalSize (hBitmap) + sizeof( bmphdr );
bmphdr.bfReserved1 = 0;
bmphdr.bfReserved2 = 0;
bmphdr.bfOffBits = (DWORD) (sizeof( bmphdr ) + bmpInfo->biSize + nColors * sizeof(RGBQUAD));
// Write the file header
file.Write( &bmphdr, sizeof(bmphdr) );
// Write the DIB header and the bits
file.Write(bmpInfo, GlobalSize(hBitmap));
return TRUE;
}
|
|
|
|
|
i am doing a project on 2-d graphics editor-something like paintbrush.well i am a novice at it.can anyone experienced give directions??
anurag
|
|
|
|
|
what would be the coding to load the bmp in a static control of a Dialog tather than in a Document ?
Thanks in advance
DD
|
|
|
|
|
You can use LoadImage() to load the bitmap and call CStatic::SetBitmap() to set the bitmap.
|
|
|
|
|
I was testing this program and noticed that if I open 3 or more image files the program crashes or gives me an error message.
To recreate the problem I clicked on the toolbar button "Open" , then I get my dialog box which gives me the option to open a file. If I do this more than 3 times with the same files I will get an error message saying "cannot open file it is not supported ..."
I have tried it on dfferent computers on a DELL Dimension V333 and on a Compaq Pressario and I get the same problem.
|
|
|
|
|
I cannot reproduce the problem. What OS are you using? Does it happen with any image files or only a specific image file?
|
|
|
|
|
I recompiled the code and run the program again and could not reproduce the problem. It must have been something wrong with my compiler. By the way I'm using visual c++ 6.0.
Sorry, false alarm
|
|
|
|
|
Can someone suggest how 2 Save the Image Loaded in a format which can be reloaded whenever required.
I do not wish to copy the original file ,if i have all the image data in my program.
|
|
|
|
|
I have made an application using Dialog Boxes. I want to add a printing feature
to print the whole Dialog Box.
Can u help me in this?
my email x.i.peng@163.com
|
|
|
|
|
Let's see.....
1. The question has little to nothing to do with this article.
2. You're not committed enough to this community to get an account or even to indicate that you're going to check back for a reply.
3. You didn't ask in the proper forums.
4. You didn't say please.
On what level do you think this is the way to solve your problem ?
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
During last 10 years, with invention of VB and similar programming environments, every ill-educated moron became able to develop software. - Alex E. - 12-Sept-2002
|
|
|
|
|
|
I'm not trying to discourage you from asking for help, just suggesting that you're going the wrong way about it. Apart from anything else, this article has nothing to do with your problem, and everyone who has voted for it, gave it a 1. On what basis then would this be the person to ask, when you can ask the whole site in the programming forum ?
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
During last 10 years, with invention of VB and similar programming environments, every ill-educated moron became able to develop software. - Alex E. - 12-Sept-2002
|
|
|
|
|
Tbh you're a bit of an ass. He doesn't speak particularly good English and I think it's fairly obvious the answer to all 4 of your particularly helpful comments is that it's pretty confusing when you don't understand what's going on. Maybe you should show a little more consideration rather than making snide comments.
|
|
|
|
|
it can load JPG but not BMP
help me
|
|
|
|
|
::LoadImage will load a bmp.
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
During last 10 years, with invention of VB and similar programming environments, every ill-educated moron became able to develop software. - Alex E. - 12-Sept-2002
|
|
|
|
|
how can i use LoadImage?
can you tell me an example?
|
|
|
|
|
|
sorry,my english is poor,
my meaning is how to use it the current sample instead of OleLoadPicturePath function
|
|
|
|
|
I'm sorry, I've not looked at the sample. To be honest, it's probably easier overall if you look at some other articles on CP which are more descriptuve of what they do and offer all these formats to you. However, in this case, whatever the load function is, you'd just parse for .bmp on the filename and use LoadBitmap to load the image instead in that case.
Unless you need W95 support, I'd suggest my GDI+ articles to be your best bet.
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
During last 10 years, with invention of VB and similar programming environments, every ill-educated moron became able to develop software. - Alex E. - 12-Sept-2002
|
|
|
|
|
It does load .BMP.
Can Microsoft Paint load your .BMP? Have you tried some other .BMP files?
|
|
|
|
|
Microsoft Paint can load my BMP
some .bmp can be loaded,but others can not
|
|
|
|
|