Re: display array in a frame wnd

Tech-Archive recommends: Fix windows errors by optimizing your registry



Hi Joseph,

I think you are probably right in the fact that my first applications using
document/view
were not satisfying me and and I did not go further.

At the moment, I think it will take me long time to understand correctly
document/view architecture and use
it correctly.
I have also to reconsider my class architecture (vision system - grabbing
system - cameras - external communications - image processing.- api
sequence..),
which is not easy. Some display are corresponding to several cameras (global
display), others are only for cameras.

I can't spend too much time for self training, and I have difficulties to
evaluate necessary time.
That is the reason why I go on my work on CFrameWnd. But perhaps CView can
be used as a CFramWnd
wich permits me perhaps to migrate slowly.

Here is the code I have used to display my IplImage* (pointer on my image
structure).
It works and I think the method to display the image in a CView or a
CFrameWnd must be similar.

CDisplayImg is a subclass of CFrameWnd
I just have to create a CDisplay object and
use
pDisplayImg->ShowImage(pImg) ;
to get a window with my image.

But, I have a little problem and perhaps you will have an idea.
When I resize the window(with the mouse on the border frame), the
refreshment is uncomfortable because it
goes from image to blank to image etc (it is flashing).

I have put the fonction DrawToHDC in the on paint function of the window.
Is there a technique to avoid this flashing.
It is the same if I want to draw with the mouse a rectangle (simulation of
selecting area)
If I want to see the drawing, it is flashing.
I think it is due to refreshment but I have no idea to optimize it.

Do you see something wrong.

Thank you for your help

Jeff

void CDisplayImg::ShowImage(IplIMage* pImg)
{
m_pImg = pImg ;
CRect rect ;
GetClientRect(&rect) ;
DrawToHDC(this->GetDC()->m_hDC,rect) ;
}

void CDisplayImg::DrawToHDC( HDC hDCDst, RECT* pDstRect,bool bFlag )
{
if( pDstRect && m_pImg && m_pImg->depth == IPL_DEPTH_8U &&
m_pImg->imageData )
{
int bmp_w = m_pImg->width, bmp_h = m_pImg->height;

CvRect roi = cvGetImageROI( m_pImg );
CvRect dst = RectToCvRect( *pDstRect );

if( roi.width == dst.width && roi.height == dst.height )
{
Show( hDCDst, dst.x, dst.y, dst.width, dst.height, roi.x,
roi.y );
return;
}

if( roi.width > dst.width )
{
SetStretchBltMode(
hDCDst, // handle to device context
HALFTONE );
}
else
{
SetStretchBltMode(
hDCDst, // handle to device context
COLORONCOLOR );
}

FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), m_pImg->origin );

::StretchDIBits(
hDCDst,
dst.x, dst.y, dst.width, dst.height,
roi.x, roi.y, roi.width, roi.height,
m_pImg->imageData, bmi, DIB_RGB_COLORS, SRCCOPY );
}
}

void CDisplayImg::FillBitmapInfo( BITMAPINFO* bmi, int width, int height,
int bpp, int origin )
{
assert( bmi && width >= 0 && height >= 0 && (bpp == 8 || bpp == 24 ||
bpp == 32));

BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);

memset( bmih, 0, sizeof(*bmih));
bmih->biSize = sizeof(BITMAPINFOHEADER);
bmih->biWidth = width;
bmih->biHeight = origin ? abs(height) : -abs(height);
bmih->biPlanes = 1;
bmih->biBitCount = (unsigned short)bpp;
bmih->biCompression = BI_RGB;

if( bpp == 8 )
{
RGBQUAD* palette = bmi->bmiColors;
int i;
for( i = 0; i < 256; i++ )
{
palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed =
(BYTE)i;
palette[i].rgbReserved = 0;
}
}
}


.



Relevant Pages

  • Re: display array in a frame wnd
    ... Some display are corresponding to several cameras (global ... void CDisplayImg::DrawToHDC ... void CDisplayImg::FillBitmapInfo(BITMAPINFO* bmi, int width, int height, ... int bpp, int origin) ...
    (microsoft.public.vc.mfc)
  • Re: COBOL PIC format for a 64 bit unsigned int ("long long") ?
    ... right PIC clause to match the "unsigned long long", ... Your COBOL picture clause for the quadword is not wide enough. ... paramater (such as DISPLAY or MOVE) the COBOL code ACCVIO's. ... int main { ...
    (comp.os.vms)
  • Re: Roy Ratcliffes Java Splash Screen
    ... Both display the 'warning applet window' as expected, but NN clears, ... end and the splash frame to finalize. ... int displayTime) throws IOException { ... public void finish{ ...
    (comp.lang.java.gui)
  • Re: 8 Bytes support in scroll functions
    ... So i'll display data at this offset. ... A scrollbar doesn't ... get is 1 pixel, so on a 1024x768 display, a horizontal scrollbar can ... GetScrollPos and SetScrollRange takes int as input and return an int ...
    (microsoft.public.vc.mfc)
  • Re: Weird malloc behaviour
    ... I am programming a PLC with an 80188 processor, ... BEAM_PROFILE * bpp; ... When I use the small memory model, ...
    (comp.lang.c)