This topic and its replies were posted before the current version of LEADTOOLS was released and may no longer be applicable.
#1
Posted
:
Thursday, August 4, 2005 10:34:05 PM(UTC)
Groups: Registered
Posts: 5
I have an app that updates the screen using double buffering, so I'm
drawing to a Lead bitmap that's the size of the visible workspace and
then using Win32 BitBlt to transfer to the screen. That works fine, but
some drawing needs to refer to the previously created pixels (transparency), and I'm finding
it's a bit slow to extract rectangular sections of a Lead bitmap with
GetRow(), especially when they get large, like 5000 x 5000 or so. So, I
tried using the TYPE_USER flag and managing the bitmap buffer memory
myself so I can have access to the bits and write my own routines to
access the Lead bits. It just didn't work - CreateLeadDC() returns NULL and
that's where I got stuck. Is there anything to be aware of regarding
user-allocated bitmap memory and CreateLeadDC()? Thanks.
Dave
#2
Posted
:
Tuesday, August 9, 2005 6:32:30 AM(UTC)
Groups: Guests
Posts: 3,022
Was thanked: 2 time(s) in 2 post(s)
There is nothing special you need to do when calling
CreateLeadDC().
Which version of LEADTOOLS are you using? Can you post a sample
test project that shows this problem so that we can test it?
Thanks,
Bashar Abdulqaiyume
LEAD Tachnologies, Inc.
#3
Posted
:
Thursday, August 11, 2005 8:44:54 PM(UTC)
Groups: Registered
Posts: 5
OK, I created a basic MFC app with the VS.NET 2003 wizard. I'm using LeadTools Raster Pro v14.
Here's the relevant portion of a test program I wrote, part of OnDraw():
-------------------------------
HDC hDC = pDC->m_hDC;
LBitmap bm;
int w = 500;
int h = 500;
int nTotalBits = w * h * 4;
DWORD* pBits = new DWORD[w * h];
int err = bm.Create(w, h, 32, ORDER_RGB, NULL, BOTTOM_LEFT, TYPE_USER, (L_UCHAR*)pBits, nTotalBits);
HDC hMemDC = bm.CreateLeadDC();
int leaderr = LBase::GetErrorFromList();
--------------------
CreateLeadDC() always returns NULL, just as in my real app. err
returns 1. leaderr returns 1. I've loaded the core DLLs in
InitInstance():
LBase::LoadLibraries(LT_KRN | LT_DIS | LT_IMG);
I tried Initialize()/Allocate() as well. It does let me Paint my
modified pixels to the screen, but hMemDC is still NULL and GDI
commands are not available. I very much want to be able to use GDI
routines and access the pixels directly.
LBase::GetErrorString() returns Operation Successful.
I'm on XP SP2. Is there any connection to the video card? It's an ATI Radeon 9250.
What's going on?
Thanks for your help.
Dave
#4
Posted
:
Monday, August 15, 2005 8:51:01 AM(UTC)
Groups: Manager, Tech Support
Posts: 367
Was thanked: 1 time(s) in 1 post(s)
Dave,
You can avoid creating a LEAD DC for the TYPE_USER image and find another way to solve your original problem.
To efficiently extract rectangular sections of a Lead bitmap, create a
secondary image (whether regular or TYPE_USER) with the desired
rectangle dimensions and copy the data to it using the Combine function.
Amin Dodin
LEADTOOLS Technical Support
Amin Dodin
Senior Support Engineer
LEAD Technologies, Inc.
#5
Posted
:
Monday, August 15, 2005 12:11:35 PM(UTC)
Groups: Registered
Posts: 5
Thanks, but this doesn't really solve my problem. I want to draw into a
bitmap using HDC functions like PolyPolygon() but also have direct
access to the bits for my own custom code. Why doesn't CreateLeadDC()
work with TYPE_USER? There's nothing in the documentation to indicate
it wouldn't' work. If there's a technical reason, tell me what it is,
so at least I understand the details. I need to minimize memory usage
with large bitmaps (6000x6000 and larger), and having direct access to
the same bits that Windows draws into is a perfect solution for me.
Also, I'm already copying large rectangles to and from the main Lead
bitmap surface and sometimes it takes nearly as long as doing my custom
operations like gradients and transparencies, thus the need to read and
write the bits directly and perform the custom operations directly on
the Lead bits, which is really my own memory. I've tried using DIB
Sections with no success,
and using TYPE_USER is better anyway since I'm ultimately writing an
image file using Lead. I just need maximum speed via minimizing bitblts
and minimized memory usage. Thanks.
Dave
#6
Posted
:
Thursday, August 18, 2005 1:17:52 PM(UTC)
Groups: Registered
Posts: 5
Please, I need a follow up to my latest reply. This issue is very
important and greatly affects the performance of our application.
Dave
#7
Posted
:
Wednesday, August 24, 2005 2:04:04 PM(UTC)
Groups: Manager, Tech Support
Posts: 367
Was thanked: 1 time(s) in 1 post(s)
I suspected this but wasn't sure about it. I checked with our
engineering department and got the reply that CreateLeadDC will NOT
work with TYPE_USER bitmaps. It will also not work with tiled bitmaps.
Did you try the Combine option? It will most likely be much faster than copying data row-by-row.
Amin Dodin
LEADTOOLS Technical Support
Amin Dodin
Senior Support Engineer
LEAD Technologies, Inc.
#8
Posted
:
Wednesday, August 24, 2005 4:43:20 PM(UTC)
Groups: Registered
Posts: 5
Actually, I got Windows DIB Sections to work, so that will do the job.
Dave
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.