473,320 Members | 1,831 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

Draw an Image on my Form

Hi,

I have an inherited DataGrid, that does lots of extra stuff. For exemple
drawing a backgroundimage in every cell. The problem is that it's taking too
much time (using gdi+), so I want to do it using DirectX. I downloaded
already the DSK etc, but I can't find how I need to draw an image on a given
position. I don't need stuff to write advanced 3D-games, just painting that
image. Can anybody help me with this? I'm already looking for this the whole
afternoon :-/

I learned already that I shouldn't use DirectDraw (not supported anymore)
but Direct3D? But that's really all I know yet.

Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in
VB.NET: as simple and as fast as possible.. :-)

Thanks a lot in advance,

Pieter
Jul 28 '05 #1
21 3028
Have you timed to find out what the problem is ? DirectX would more likely
help if you repeateadly draw the whole (updated) thing. Here you just have
to draw this one time before there is some other kind of interaction.

Before switching to a whole new method I would investigate (in particular I
would time) the current code to find out where is spent the time budget...

(and next time thanks for trying to narrow down the groups to which you
posts).
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ek**************@TK2MSFTNGP09.phx.gbl...
Hi,

I have an inherited DataGrid, that does lots of extra stuff. For exemple
drawing a backgroundimage in every cell. The problem is that it's taking too much time (using gdi+), so I want to do it using DirectX. I downloaded
already the DSK etc, but I can't find how I need to draw an image on a given position. I don't need stuff to write advanced 3D-games, just painting that image. Can anybody help me with this? I'm already looking for this the whole afternoon :-/

I learned already that I shouldn't use DirectDraw (not supported anymore)
but Direct3D? But that's really all I know yet.

Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in
VB.NET: as simple and as fast as possible.. :-)

Thanks a lot in advance,

Pieter

Jul 28 '05 #2
Well that's exactly what made me decide which to use DirectX: for every cell
it has to paint an image, and this has to happen on every paint of my
datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed it, and
it takes the most time of my whole application (after using my application
for some seconds it has painted the same hing already more tahn 4000
times...) ! I'm trying to make it faster tha past days, and imrpoved it
already a lot, but I saw the only improvement i can make now is using
DirectX...
"Patrice" <no****@nowhere.com> wrote in message
news:eR**************@tk2msftngp13.phx.gbl...
Have you timed to find out what the problem is ? DirectX would more likely
help if you repeateadly draw the whole (updated) thing. Here you just have to draw this one time before there is some other kind of interaction.

Before switching to a whole new method I would investigate (in particular I would time) the current code to find out where is spent the time budget...

(and next time thanks for trying to narrow down the groups to which you
posts).
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ek**************@TK2MSFTNGP09.phx.gbl...
Hi,

I have an inherited DataGrid, that does lots of extra stuff. For exemple
drawing a backgroundimage in every cell. The problem is that it's taking

too
much time (using gdi+), so I want to do it using DirectX. I downloaded
already the DSK etc, but I can't find how I need to draw an image on a

given
position. I don't need stuff to write advanced 3D-games, just painting

that
image. Can anybody help me with this? I'm already looking for this the

whole
afternoon :-/

I learned already that I shouldn't use DirectDraw (not supported anymore) but Direct3D? But that's really all I know yet.

Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in VB.NET: as simple and as fast as possible.. :-)

Thanks a lot in advance,

Pieter


Jul 28 '05 #3
If you switch to DX, you will need to re-implement your datagrid in DX and
paint all the data, etc. DX and GDI are very, very different.
"DraguVaso" <pi**********@hotmail.com> wrote in message
news:ey**************@TK2MSFTNGP10.phx.gbl...
Well that's exactly what made me decide which to use DirectX: for every
cell
it has to paint an image, and this has to happen on every paint of my
datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed it,
and
it takes the most time of my whole application (after using my application
for some seconds it has painted the same hing already more tahn 4000
times...) ! I'm trying to make it faster tha past days, and imrpoved it
already a lot, but I saw the only improvement i can make now is using
DirectX...
"Patrice" <no****@nowhere.com> wrote in message
news:eR**************@tk2msftngp13.phx.gbl...
Have you timed to find out what the problem is ? DirectX would more
likely
help if you repeateadly draw the whole (updated) thing. Here you just

have
to draw this one time before there is some other kind of interaction.

Before switching to a whole new method I would investigate (in particular

I
would time) the current code to find out where is spent the time
budget...

(and next time thanks for trying to narrow down the groups to which you
posts).
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ek**************@TK2MSFTNGP09.phx.gbl...
> Hi,
>
> I have an inherited DataGrid, that does lots of extra stuff. For
> exemple
> drawing a backgroundimage in every cell. The problem is that it's
> taking

too
> much time (using gdi+), so I want to do it using DirectX. I downloaded
> already the DSK etc, but I can't find how I need to draw an image on a

given
> position. I don't need stuff to write advanced 3D-games, just painting

that
> image. Can anybody help me with this? I'm already looking for this the

whole
> afternoon :-/
>
> I learned already that I shouldn't use DirectDraw (not supported anymore) > but Direct3D? But that's really all I know yet.
>
> Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in > VB.NET: as simple and as fast as possible.. :-)
>
> Thanks a lot in advance,
>
> Pieter
>
>



Jul 28 '05 #4
I meant not as a whole but broken into steps. How much time does it take to
render how many cells ? What if you try to render a bitmap the same number
of times ? Especially keep ind mind that there are some subtles things that
could slow down the process such as stretching or doing some operations each
time you draw a cell rather than once etc...

You could also see if alternate approaches may help such as drawing the
datagrid as a bitmap with a transparent color on a backgrround bitmap.

DirectX is a low level API to discuss with graphics hardware and doesn't
provide any GDI integration. IMO would be much more complex and I still
suspect you have room left for improvments...

--

Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ey**************@TK2MSFTNGP10.phx.gbl...
Well that's exactly what made me decide which to use DirectX: for every cell it has to paint an image, and this has to happen on every paint of my
datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed it, and it takes the most time of my whole application (after using my application
for some seconds it has painted the same hing already more tahn 4000
times...) ! I'm trying to make it faster tha past days, and imrpoved it
already a lot, but I saw the only improvement i can make now is using
DirectX...
"Patrice" <no****@nowhere.com> wrote in message
news:eR**************@tk2msftngp13.phx.gbl...
Have you timed to find out what the problem is ? DirectX would more likely
help if you repeateadly draw the whole (updated) thing. Here you just have
to draw this one time before there is some other kind of interaction.

Before switching to a whole new method I would investigate (in particular I
would time) the current code to find out where is spent the time
budget...
(and next time thanks for trying to narrow down the groups to which you
posts).
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ek**************@TK2MSFTNGP09.phx.gbl...
Hi,

I have an inherited DataGrid, that does lots of extra stuff. For exemple drawing a backgroundimage in every cell. The problem is that it's
taking too
much time (using gdi+), so I want to do it using DirectX. I downloaded
already the DSK etc, but I can't find how I need to draw an image on a

given
position. I don't need stuff to write advanced 3D-games, just painting

that
image. Can anybody help me with this? I'm already looking for this the

whole
afternoon :-/

I learned already that I shouldn't use DirectDraw (not supported

anymore) but Direct3D? But that's really all I know yet.

Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a
Form in VB.NET: as simple and as fast as possible.. :-)

Thanks a lot in advance,

Pieter



Jul 28 '05 #5
You wont be able to do this with the standard datagrid, I think you will
need to find a third party grid that supports drawing an image in each cell
and then keeps that on its backbuffer and doesnt render the image with each
paint, or find an open source grid and modify for you needs.

James

--
Create interactive diagrams and flowcharts with ERM Diagram at
http://www.crainiate.net

Take the ERM Tour at http://www.flowchartcontrol.com

"DraguVaso" <pi**********@hotmail.com> wrote in message
news:ek**************@TK2MSFTNGP09.phx.gbl...
Hi,

I have an inherited DataGrid, that does lots of extra stuff. For exemple
drawing a backgroundimage in every cell. The problem is that it's taking
too
much time (using gdi+), so I want to do it using DirectX. I downloaded
already the DSK etc, but I can't find how I need to draw an image on a
given
position. I don't need stuff to write advanced 3D-games, just painting
that
image. Can anybody help me with this? I'm already looking for this the
whole
afternoon :-/

I learned already that I shouldn't use DirectDraw (not supported anymore)
but Direct3D? But that's really all I know yet.

Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in
VB.NET: as simple and as fast as possible.. :-)

Thanks a lot in advance,

Pieter

Jul 28 '05 #6
What method are you using ? Using a brush seems quite quick...
(narrowed down to
microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawing,
microsoft.public.dotnet.general)
--
Patrice

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:O8***************@tk2msftngp13.phx.gbl...
I meant not as a whole but broken into steps. How much time does it take to render how many cells ? What if you try to render a bitmap the same number
of times ? Especially keep ind mind that there are some subtles things that could slow down the process such as stretching or doing some operations each time you draw a cell rather than once etc...

You could also see if alternate approaches may help such as drawing the
datagrid as a bitmap with a transparent color on a backgrround bitmap.

DirectX is a low level API to discuss with graphics hardware and doesn't
provide any GDI integration. IMO would be much more complex and I still
suspect you have room left for improvments...

--

Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ey**************@TK2MSFTNGP10.phx.gbl...
Well that's exactly what made me decide which to use DirectX: for every

cell
it has to paint an image, and this has to happen on every paint of my
datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed it,

and
it takes the most time of my whole application (after using my application
for some seconds it has painted the same hing already more tahn 4000
times...) ! I'm trying to make it faster tha past days, and imrpoved it
already a lot, but I saw the only improvement i can make now is using
DirectX...
"Patrice" <no****@nowhere.com> wrote in message
news:eR**************@tk2msftngp13.phx.gbl...
Have you timed to find out what the problem is ? DirectX would more

likely help if you repeateadly draw the whole (updated) thing. Here you just

have
to draw this one time before there is some other kind of interaction.

Before switching to a whole new method I would investigate (in particular
I
would time) the current code to find out where is spent the time

budget...
(and next time thanks for trying to narrow down the groups to which you posts).
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ek**************@TK2MSFTNGP09.phx.gbl...
> Hi,
>
> I have an inherited DataGrid, that does lots of extra stuff. For exemple > drawing a backgroundimage in every cell. The problem is that it's taking too
> much time (using gdi+), so I want to do it using DirectX. I downloaded > already the DSK etc, but I can't find how I need to draw an image on a given
> position. I don't need stuff to write advanced 3D-games, just painting that
> image. Can anybody help me with this? I'm already looking for this the whole
> afternoon :-/
>
> I learned already that I shouldn't use DirectDraw (not supported

anymore)
> but Direct3D? But that's really all I know yet.
>
> Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a

Form
in
> VB.NET: as simple and as fast as possible.. :-)
>
> Thanks a lot in advance,
>
> Pieter
>
>



Jul 28 '05 #7
Yes I am able to do it with the standard grid: I'm actually doing it
already. But I just want to be able to do it with DirectX....

So my question is still: how do I paint an image using directX? does nobody
knows this? :-S

"James Westgate" <ja***********@nospam.nospam> wrote in message
news:%2***************@TK2MSFTNGP15.phx.gbl...
You wont be able to do this with the standard datagrid, I think you will
need to find a third party grid that supports drawing an image in each cell and then keeps that on its backbuffer and doesnt render the image with each paint, or find an open source grid and modify for you needs.

James

--
Create interactive diagrams and flowcharts with ERM Diagram at
http://www.crainiate.net

Take the ERM Tour at http://www.flowchartcontrol.com

"DraguVaso" <pi**********@hotmail.com> wrote in message
news:ek**************@TK2MSFTNGP09.phx.gbl...
Hi,

I have an inherited DataGrid, that does lots of extra stuff. For exemple
drawing a backgroundimage in every cell. The problem is that it's taking
too
much time (using gdi+), so I want to do it using DirectX. I downloaded
already the DSK etc, but I can't find how I need to draw an image on a
given
position. I don't need stuff to write advanced 3D-games, just painting
that
image. Can anybody help me with this? I'm already looking for this the
whole
afternoon :-/

I learned already that I shouldn't use DirectDraw (not supported anymore) but Direct3D? But that's really all I know yet.

Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in VB.NET: as simple and as fast as possible.. :-)

Thanks a lot in advance,

Pieter


Jul 29 '05 #8
I prerender my images: that speeded up things a lot.
I put al my images into the Format32bppPArgb-Pixelformat
I use double buffering
I also use
g.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
g.CompositingQuality = Drawing2D.CompositingQuality.HighSpeed
g.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
I don't paint a BackGround to gain time.

I used a code profiler to determine the bottlenecks and speed up several
things. the only thing that still takes much time is the method which is
actually paintng every time the image: "g.DrawImage(fe.BackgroundImage,
rectB)". I know i could get faster using DrawimageUnscaled, but because ot
he cell's width etc changes I can't use it here.

So I really think there isn't any more room left to make other improvements.
So that's why i really would like to know how I have to paint an image with
DirectX. Is this really such a hard question? Just painting an image with
DirectX?


"Patrice" <no****@nowhere.com> wrote in message
news:em**************@TK2MSFTNGP14.phx.gbl...
What method are you using ? Using a brush seems quite quick...
(narrowed down to
microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawing, microsoft.public.dotnet.general)
--
Patrice

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:O8***************@tk2msftngp13.phx.gbl...
I meant not as a whole but broken into steps. How much time does it take to
render how many cells ? What if you try to render a bitmap the same number
of times ? Especially keep ind mind that there are some subtles things

that
could slow down the process such as stretching or doing some operations

each
time you draw a cell rather than once etc...

You could also see if alternate approaches may help such as drawing the
datagrid as a bitmap with a transparent color on a backgrround bitmap.

DirectX is a low level API to discuss with graphics hardware and doesn't
provide any GDI integration. IMO would be much more complex and I still
suspect you have room left for improvments...

--

Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ey**************@TK2MSFTNGP10.phx.gbl...
Well that's exactly what made me decide which to use DirectX: for every
cell
it has to paint an image, and this has to happen on every paint of my
datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed
it, and
it takes the most time of my whole application (after using my

application for some seconds it has painted the same hing already more tahn 4000
times...) ! I'm trying to make it faster tha past days, and imrpoved
it already a lot, but I saw the only improvement i can make now is using
DirectX...
"Patrice" <no****@nowhere.com> wrote in message
news:eR**************@tk2msftngp13.phx.gbl...
> Have you timed to find out what the problem is ? DirectX would more

likely
> help if you repeateadly draw the whole (updated) thing. Here you just have
> to draw this one time before there is some other kind of interaction. >
> Before switching to a whole new method I would investigate (in

particular
I
> would time) the current code to find out where is spent the time

budget...
>
> (and next time thanks for trying to narrow down the groups to which

you > posts).
> --
> Patrice
>
> "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
> news:ek**************@TK2MSFTNGP09.phx.gbl...
> > Hi,
> >
> > I have an inherited DataGrid, that does lots of extra stuff. For

exemple
> > drawing a backgroundimage in every cell. The problem is that it's

taking
> too
> > much time (using gdi+), so I want to do it using DirectX. I downloaded > > already the DSK etc, but I can't find how I need to draw an image
on a > given
> > position. I don't need stuff to write advanced 3D-games, just painting > that
> > image. Can anybody help me with this? I'm already looking for this the > whole
> > afternoon :-/
> >
> > I learned already that I shouldn't use DirectDraw (not supported
anymore)
> > but Direct3D? But that's really all I know yet.
> >
> > Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a

Form
in
> > VB.NET: as simple and as fast as possible.. :-)
> >
> > Thanks a lot in advance,
> >
> > Pieter
> >
> >
>
>



Jul 29 '05 #9
I don't get it really: How can I use a Brush it I want to paint an image? I
thought a Brush is jsut one color, not an image? Or am I wrong?
"Patrice" <no****@nowhere.com> wrote in message
news:em**************@TK2MSFTNGP14.phx.gbl...
What method are you using ? Using a brush seems quite quick...
(narrowed down to
microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawing, microsoft.public.dotnet.general)
--
Patrice

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:O8***************@tk2msftngp13.phx.gbl...
I meant not as a whole but broken into steps. How much time does it take to
render how many cells ? What if you try to render a bitmap the same number
of times ? Especially keep ind mind that there are some subtles things

that
could slow down the process such as stretching or doing some operations

each
time you draw a cell rather than once etc...

You could also see if alternate approaches may help such as drawing the
datagrid as a bitmap with a transparent color on a backgrround bitmap.

DirectX is a low level API to discuss with graphics hardware and doesn't
provide any GDI integration. IMO would be much more complex and I still
suspect you have room left for improvments...

--

Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ey**************@TK2MSFTNGP10.phx.gbl...
Well that's exactly what made me decide which to use DirectX: for every
cell
it has to paint an image, and this has to happen on every paint of my
datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed
it, and
it takes the most time of my whole application (after using my

application for some seconds it has painted the same hing already more tahn 4000
times...) ! I'm trying to make it faster tha past days, and imrpoved
it already a lot, but I saw the only improvement i can make now is using
DirectX...
"Patrice" <no****@nowhere.com> wrote in message
news:eR**************@tk2msftngp13.phx.gbl...
> Have you timed to find out what the problem is ? DirectX would more

likely
> help if you repeateadly draw the whole (updated) thing. Here you just have
> to draw this one time before there is some other kind of interaction. >
> Before switching to a whole new method I would investigate (in

particular
I
> would time) the current code to find out where is spent the time

budget...
>
> (and next time thanks for trying to narrow down the groups to which

you > posts).
> --
> Patrice
>
> "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
> news:ek**************@TK2MSFTNGP09.phx.gbl...
> > Hi,
> >
> > I have an inherited DataGrid, that does lots of extra stuff. For

exemple
> > drawing a backgroundimage in every cell. The problem is that it's

taking
> too
> > much time (using gdi+), so I want to do it using DirectX. I downloaded > > already the DSK etc, but I can't find how I need to draw an image
on a > given
> > position. I don't need stuff to write advanced 3D-games, just painting > that
> > image. Can anybody help me with this? I'm already looking for this the > whole
> > afternoon :-/
> >
> > I learned already that I shouldn't use DirectDraw (not supported
anymore)
> > but Direct3D? But that's really all I know yet.
> >
> > Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a

Form
in
> > VB.NET: as simple and as fast as possible.. :-)
> >
> > Thanks a lot in advance,
> >
> > Pieter
> >
> >
>
>



Jul 29 '05 #10
What I meant is that you can use directx onto a standard control and that
you need to fundamentally change the way you are doing things.

Good luck though!

J

#
"DraguVaso" <pi**********@hotmail.com> wrote in message
news:OM**************@TK2MSFTNGP09.phx.gbl...
Yes I am able to do it with the standard grid: I'm actually doing it
already. But I just want to be able to do it with DirectX....

So my question is still: how do I paint an image using directX? does
nobody
knows this? :-S

"James Westgate" <ja***********@nospam.nospam> wrote in message
news:%2***************@TK2MSFTNGP15.phx.gbl...
You wont be able to do this with the standard datagrid, I think you will
need to find a third party grid that supports drawing an image in each

cell
and then keeps that on its backbuffer and doesnt render the image with

each
paint, or find an open source grid and modify for you needs.

James

--
Create interactive diagrams and flowcharts with ERM Diagram at
http://www.crainiate.net

Take the ERM Tour at http://www.flowchartcontrol.com

"DraguVaso" <pi**********@hotmail.com> wrote in message
news:ek**************@TK2MSFTNGP09.phx.gbl...
> Hi,
>
> I have an inherited DataGrid, that does lots of extra stuff. For
> exemple
> drawing a backgroundimage in every cell. The problem is that it's
> taking
> too
> much time (using gdi+), so I want to do it using DirectX. I downloaded
> already the DSK etc, but I can't find how I need to draw an image on a
> given
> position. I don't need stuff to write advanced 3D-games, just painting
> that
> image. Can anybody help me with this? I'm already looking for this the
> whole
> afternoon :-/
>
> I learned already that I shouldn't use DirectDraw (not supported anymore) > but Direct3D? But that's really all I know yet.
>
> Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in > VB.NET: as simple and as fast as possible.. :-)
>
> Thanks a lot in advance,
>
> Pieter
>
>



Jul 29 '05 #11
See the TexturedBrush class. A brush is used to "fill in" something. It can
be a "solid" color but also an image. See it as a kind of wallpaper (sorry
for my poor English).
So you want to render in each cell a different bitmap ? Each bitmap is
stretched to fit in the cell ?

I'm not sure what is the graphics aspect you want but you could also see if
a new strategy could help such as grabbing the datagrid as a bitmap and
combining it as a whole with perhaps a transparent color.

Using DirectX is IMO a bit risky for such an application as it will
introduce a new dependency (for example if the target platform doesn't have
DX9 installed it won't work) plus the result will depend on the hardware
support and finally you'll have likely some problems as you'll likely have
to combine GDI/DirectX.

As a whole it doesn't seem to me that such a requirement should trigger the
use of DirectX. If you really want to go this route, you could perhaps try
to render a stretched bitmap "cells" time at an arbitrary location. It
should already give you the maximum improvment you could get over using
GDI+.

Good luck.
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:%2****************@TK2MSFTNGP09.phx.gbl...
I don't get it really: How can I use a Brush it I want to paint an image? I thought a Brush is jsut one color, not an image? Or am I wrong?
"Patrice" <no****@nowhere.com> wrote in message
news:em**************@TK2MSFTNGP14.phx.gbl...
What method are you using ? Using a brush seems quite quick...
(narrowed down to

microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawing,
microsoft.public.dotnet.general)
--
Patrice

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:O8***************@tk2msftngp13.phx.gbl...
I meant not as a whole but broken into steps. How much time does it take
to
render how many cells ? What if you try to render a bitmap the same number of times ? Especially keep ind mind that there are some subtles things

that
could slow down the process such as stretching or doing some
operations
each
time you draw a cell rather than once etc...

You could also see if alternate approaches may help such as drawing
the datagrid as a bitmap with a transparent color on a backgrround bitmap.

DirectX is a low level API to discuss with graphics hardware and doesn't provide any GDI integration. IMO would be much more complex and I still suspect you have room left for improvments...

--

Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:ey**************@TK2MSFTNGP10.phx.gbl...
> Well that's exactly what made me decide which to use DirectX: for

every cell
> it has to paint an image, and this has to happen on every paint of my > datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed it, and
> it takes the most time of my whole application (after using my

application
> for some seconds it has painted the same hing already more tahn 4000
> times...) ! I'm trying to make it faster tha past days, and imrpoved it > already a lot, but I saw the only improvement i can make now is using > DirectX...
>
>
> "Patrice" <no****@nowhere.com> wrote in message
> news:eR**************@tk2msftngp13.phx.gbl...
> > Have you timed to find out what the problem is ? DirectX would more likely
> > help if you repeateadly draw the whole (updated) thing. Here you just > have
> > to draw this one time before there is some other kind of interaction. > >
> > Before switching to a whole new method I would investigate (in
particular
> I
> > would time) the current code to find out where is spent the time
budget...
> >
> > (and next time thanks for trying to narrow down the groups to which you
> > posts).
> > --
> > Patrice
> >
> > "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
> > news:ek**************@TK2MSFTNGP09.phx.gbl...
> > > Hi,
> > >
> > > I have an inherited DataGrid, that does lots of extra stuff. For
exemple
> > > drawing a backgroundimage in every cell. The problem is that
it's taking
> > too
> > > much time (using gdi+), so I want to do it using DirectX. I

downloaded
> > > already the DSK etc, but I can't find how I need to draw an image on
a
> > given
> > > position. I don't need stuff to write advanced 3D-games, just

painting
> > that
> > > image. Can anybody help me with this? I'm already looking for

this the
> > whole
> > > afternoon :-/
> > >
> > > I learned already that I shouldn't use DirectDraw (not supported
> anymore)
> > > but Direct3D? But that's really all I know yet.
> > >
> > > Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on

a Form
> in
> > > VB.NET: as simple and as fast as possible.. :-)
> > >
> > > Thanks a lot in advance,
> > >
> > > Pieter
> > >
> > >
> >
> >
>
>



Jul 29 '05 #12
As a side note if you have several cells with the same width/height you
could perhaps create a stretched version and use it to perform an
unstretched copy ?

--

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:%2****************@TK2MSFTNGP15.phx.gbl...
See the TexturedBrush class. A brush is used to "fill in" something. It can be a "solid" color but also an image. See it as a kind of wallpaper (sorry
for my poor English).
So you want to render in each cell a different bitmap ? Each bitmap is
stretched to fit in the cell ?

I'm not sure what is the graphics aspect you want but you could also see if a new strategy could help such as grabbing the datagrid as a bitmap and
combining it as a whole with perhaps a transparent color.

Using DirectX is IMO a bit risky for such an application as it will
introduce a new dependency (for example if the target platform doesn't have DX9 installed it won't work) plus the result will depend on the hardware
support and finally you'll have likely some problems as you'll likely have
to combine GDI/DirectX.

As a whole it doesn't seem to me that such a requirement should trigger the use of DirectX. If you really want to go this route, you could perhaps try
to render a stretched bitmap "cells" time at an arbitrary location. It
should already give you the maximum improvment you could get over using
GDI+.

Good luck.
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:%2****************@TK2MSFTNGP09.phx.gbl...
I don't get it really: How can I use a Brush it I want to paint an image?
I
thought a Brush is jsut one color, not an image? Or am I wrong?
"Patrice" <no****@nowhere.com> wrote in message
news:em**************@TK2MSFTNGP14.phx.gbl...
What method are you using ? Using a brush seems quite quick...
(narrowed down to

microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawin

g,
microsoft.public.dotnet.general)
--
Patrice

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:O8***************@tk2msftngp13.phx.gbl...
> I meant not as a whole but broken into steps. How much time does it take to
> render how many cells ? What if you try to render a bitmap the same

number
> of times ? Especially keep ind mind that there are some subtles things that
> could slow down the process such as stretching or doing some operations each
> time you draw a cell rather than once etc...
>
> You could also see if alternate approaches may help such as drawing the > datagrid as a bitmap with a transparent color on a backgrround bitmap. >
> DirectX is a low level API to discuss with graphics hardware and doesn't > provide any GDI integration. IMO would be much more complex and I still > suspect you have room left for improvments...
>
> --
>
> Patrice
>
> "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
> news:ey**************@TK2MSFTNGP10.phx.gbl...
> > Well that's exactly what made me decide which to use DirectX: for

every
> cell
> > it has to paint an image, and this has to happen on every paint of my > > datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed
it,
> and
> > it takes the most time of my whole application (after using my
application
> > for some seconds it has painted the same hing already more tahn
4000 > > times...) ! I'm trying to make it faster tha past days, and imrpoved
it
> > already a lot, but I saw the only improvement i can make now is using > > DirectX...
> >
> >
> > "Patrice" <no****@nowhere.com> wrote in message
> > news:eR**************@tk2msftngp13.phx.gbl...
> > > Have you timed to find out what the problem is ? DirectX would more > likely
> > > help if you repeateadly draw the whole (updated) thing. Here
you just
> > have
> > > to draw this one time before there is some other kind of

interaction.
> > >
> > > Before switching to a whole new method I would investigate (in
> particular
> > I
> > > would time) the current code to find out where is spent the time
> budget...
> > >
> > > (and next time thanks for trying to narrow down the groups to

which you
> > > posts).
> > > --
> > > Patrice
> > >
> > > "DraguVaso" <pi**********@hotmail.com> a écrit dans le message
de > > > news:ek**************@TK2MSFTNGP09.phx.gbl...
> > > > Hi,
> > > >
> > > > I have an inherited DataGrid, that does lots of extra stuff. For > exemple
> > > > drawing a backgroundimage in every cell. The problem is that

it's > taking
> > > too
> > > > much time (using gdi+), so I want to do it using DirectX. I
downloaded
> > > > already the DSK etc, but I can't find how I need to draw an image
on
a
> > > given
> > > > position. I don't need stuff to write advanced 3D-games, just
painting
> > > that
> > > > image. Can anybody help me with this? I'm already looking for

this the
> > > whole
> > > > afternoon :-/
> > > >
> > > > I learned already that I shouldn't use DirectDraw (not supported > > anymore)
> > > > but Direct3D? But that's really all I know yet.
> > > >
> > > > Basicly I jsut need to be able to draw an imahe (jpg, bitmap)
on a > Form
> > in
> > > > VB.NET: as simple and as fast as possible.. :-)
> > > >
> > > > Thanks a lot in advance,
> > > >
> > > > Pieter
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Jul 29 '05 #13
I'm pretty sure the answer is "you can't do it". GDI+ uses Graphics
objects, rectangles, polygons, lines, and Fill routines designed for 2D
drawing. DirectX uses Surface objects, vertexes, polygons (though not the
same as a GDI+ polygon), shaders, and renderers designed for 3D drawing.

GDI+ and DirectX are completely different models, built for completely
different tasks, and I don't believe there is any bridge mechanism between
them. Even if there were, it's likely all to be through Interop, which
could eat up all the speed gains you might get by drawing your image with
DirectX. Or, you'd have to do all the translation by hand in code -
essentially re-creating your DataGrid visual representation completely
within the DirectX environment. That's simply not practical.

This is what the folks have been trying to tell you with their posts: you
either need to go 100% DirectX (which means you're dropping the DataGrid
inheritance and writing your own completely from scratch), or 100% GDI+ -
you can't mix the two. Given that the DataGrid uses GDI+, the logical thing
to do is work to get acceptable performance from GDI+. Of course, you've
already said that you're not getting acceptable performance from GDI+, so
you're back to creating your own grid from scratch (using either drawing
library), purchasing one, or trying to get what you've got working.

If your problem is that your cells are not the same size as your background
image, and that they can be resized, you can approach it one of two ways:
allow your background image to be tiled (which can be done quite quickly
with a TextureBrush, and should perform well); or maintain a cache of all
distinct cell sizes, along with appropriately-sized background images, and
draw them into the cell (which may not help much, if the user does a lot of
resizing.) I am assuming that you're only drawing the background image on
visible DataGrid cells, but if not, that's another optimization that will
likely pay off quite well.

You could also consider going directly to the GDI BitBlt API call - I've
heard that the speed gains in doing that outweigh the cost of the Interop
call, but I haven't tested that.

- Scott

"DraguVaso" <pi**********@hotmail.com> wrote in message
news:OM**************@TK2MSFTNGP09.phx.gbl...
Yes I am able to do it with the standard grid: I'm actually doing it
already. But I just want to be able to do it with DirectX....

So my question is still: how do I paint an image using directX? does
nobody
knows this? :-S

"James Westgate" <ja***********@nospam.nospam> wrote in message
news:%2***************@TK2MSFTNGP15.phx.gbl...
You wont be able to do this with the standard datagrid, I think you will
need to find a third party grid that supports drawing an image in each

cell
and then keeps that on its backbuffer and doesnt render the image with

each
paint, or find an open source grid and modify for you needs.

James

--
Create interactive diagrams and flowcharts with ERM Diagram at
http://www.crainiate.net

Take the ERM Tour at http://www.flowchartcontrol.com

"DraguVaso" <pi**********@hotmail.com> wrote in message
news:ek**************@TK2MSFTNGP09.phx.gbl...
> Hi,
>
> I have an inherited DataGrid, that does lots of extra stuff. For
> exemple
> drawing a backgroundimage in every cell. The problem is that it's
> taking
> too
> much time (using gdi+), so I want to do it using DirectX. I downloaded
> already the DSK etc, but I can't find how I need to draw an image on a
> given
> position. I don't need stuff to write advanced 3D-games, just painting
> that
> image. Can anybody help me with this? I'm already looking for this the
> whole
> afternoon :-/
>
> I learned already that I shouldn't use DirectDraw (not supported anymore) > but Direct3D? But that's really all I know yet.
>
> Basicly I jsut need to be able to draw an imahe (jpg, bitmap) on a Form in > VB.NET: as simple and as fast as possible.. :-)
>
> Thanks a lot in advance,
>
> Pieter
>
>



Jul 29 '05 #14
I'm trying to use the TextureBrush, but it doesn't give the effect Iwant it
to have: it doesn't put in every cell 1 image, but puts the image x times
next to each other, independent of the cell-sizes... What I need is: one
image for each cell, and the image should be adapted to the cell-size... I
tried with the Wrapmode.Clamp, but that just draws the image only one time:
in the left upper corner of my DataGrid... :-/

"Patrice" <no****@nowhere.com> wrote in message
news:%2****************@TK2MSFTNGP15.phx.gbl...
See the TexturedBrush class. A brush is used to "fill in" something. It can be a "solid" color but also an image. See it as a kind of wallpaper (sorry
for my poor English).
So you want to render in each cell a different bitmap ? Each bitmap is
stretched to fit in the cell ?

I'm not sure what is the graphics aspect you want but you could also see if a new strategy could help such as grabbing the datagrid as a bitmap and
combining it as a whole with perhaps a transparent color.

Using DirectX is IMO a bit risky for such an application as it will
introduce a new dependency (for example if the target platform doesn't have DX9 installed it won't work) plus the result will depend on the hardware
support and finally you'll have likely some problems as you'll likely have
to combine GDI/DirectX.

As a whole it doesn't seem to me that such a requirement should trigger the use of DirectX. If you really want to go this route, you could perhaps try
to render a stretched bitmap "cells" time at an arbitrary location. It
should already give you the maximum improvment you could get over using
GDI+.

Good luck.
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:%2****************@TK2MSFTNGP09.phx.gbl...
I don't get it really: How can I use a Brush it I want to paint an image?
I
thought a Brush is jsut one color, not an image? Or am I wrong?
"Patrice" <no****@nowhere.com> wrote in message
news:em**************@TK2MSFTNGP14.phx.gbl...
What method are you using ? Using a brush seems quite quick...
(narrowed down to

microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawing,
microsoft.public.dotnet.general)
--
Patrice

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:O8***************@tk2msftngp13.phx.gbl...
> I meant not as a whole but broken into steps. How much time does it take to
> render how many cells ? What if you try to render a bitmap the same

number
> of times ? Especially keep ind mind that there are some subtles things that
> could slow down the process such as stretching or doing some operations each
> time you draw a cell rather than once etc...
>
> You could also see if alternate approaches may help such as drawing the > datagrid as a bitmap with a transparent color on a backgrround bitmap. >
> DirectX is a low level API to discuss with graphics hardware and doesn't > provide any GDI integration. IMO would be much more complex and I still > suspect you have room left for improvments...
>
> --
>
> Patrice
>
> "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
> news:ey**************@TK2MSFTNGP10.phx.gbl...
> > Well that's exactly what made me decide which to use DirectX: for

every
> cell
> > it has to paint an image, and this has to happen on every paint of my > > datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed
it,
> and
> > it takes the most time of my whole application (after using my
application
> > for some seconds it has painted the same hing already more tahn
4000 > > times...) ! I'm trying to make it faster tha past days, and imrpoved
it
> > already a lot, but I saw the only improvement i can make now is using > > DirectX...
> >
> >
> > "Patrice" <no****@nowhere.com> wrote in message
> > news:eR**************@tk2msftngp13.phx.gbl...
> > > Have you timed to find out what the problem is ? DirectX would more > likely
> > > help if you repeateadly draw the whole (updated) thing. Here
you just
> > have
> > > to draw this one time before there is some other kind of

interaction.
> > >
> > > Before switching to a whole new method I would investigate (in
> particular
> > I
> > > would time) the current code to find out where is spent the time
> budget...
> > >
> > > (and next time thanks for trying to narrow down the groups to

which you
> > > posts).
> > > --
> > > Patrice
> > >
> > > "DraguVaso" <pi**********@hotmail.com> a écrit dans le message
de > > > news:ek**************@TK2MSFTNGP09.phx.gbl...
> > > > Hi,
> > > >
> > > > I have an inherited DataGrid, that does lots of extra stuff. For > exemple
> > > > drawing a backgroundimage in every cell. The problem is that

it's > taking
> > > too
> > > > much time (using gdi+), so I want to do it using DirectX. I
downloaded
> > > > already the DSK etc, but I can't find how I need to draw an image
on
a
> > > given
> > > > position. I don't need stuff to write advanced 3D-games, just
painting
> > > that
> > > > image. Can anybody help me with this? I'm already looking for

this the
> > > whole
> > > > afternoon :-/
> > > >
> > > > I learned already that I shouldn't use DirectDraw (not supported > > anymore)
> > > > but Direct3D? But that's really all I know yet.
> > > >
> > > > Basicly I jsut need to be able to draw an imahe (jpg, bitmap)
on a > Form
> > in
> > > > VB.NET: as simple and as fast as possible.. :-)
> > > >
> > > > Thanks a lot in advance,
> > > >
> > > > Pieter
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Aug 1 '05 #15
Your description below is not quite consistent:
I prerender my images: that speeded up things a lot. I know i could get faster using DrawimageUnscaled, but because
the cell's width etc changes I can't use it here.
You are missing a big optimization if your "prerendering" code does not also
prerender to the ultimate size you're going to display. Stretching
operations are very expensive--far more so that bpp changes--you must arrange
your code to minimize the number of calls to DrawImage() over the course of
scrolling, otherwise you haven't optimized fully. (Technically, calling
DrawImage() with the width/height of the bitmap will be the same performance
as DrawImageUnscaled(), so the whole idea is to avoid stretching (or
shrinking) the image during critical performance times.)

My other concern is with your statement: 1. Format32bppPArgb pixel format is not the correct choice for optimum
performance; As this will only increase performance if the user is running at 32bpp (and
not, say, 16bpp). Also, leaving Alpha information in the format seems
suspicious to me--it seems that would means DrawImage() has more work to do.
In any case, I believe the correct way to optimize this is to use:
bmp = new Bitmap(width, height, graphics)
Where graphics was created as a "screen compatible" graphics (e.g. the one
you get during a paint event). This will ensure the pixel format matches
what eventually will go on the screen. Note that this can get complicated
for multi-monitor support (as each monitor can run at a different pixel
depth), so sticking with PixelFormat.Format32bppRgb might be warranted to
avoid these issues.

A final note: Never use the ImageAttribute parameter to DrawImage() (unless,
of course, you absolutely must), as this will massively slow things down.

I have done this quite successfully for a grid of picture thumbnails, and it
scrolls lightning fast. In my case, images that were not yet pre-rendered
got a place-holder image until a worker thread generated a thumbnail. This
entirely removes the slow stretch operation from the painting code, which is
always a good thing to do.

--Chris Fraley

"DraguVaso" wrote: I prerender my images: that speeded up things a lot.
I put al my images into the Format32bppPArgb-Pixelformat
I use double buffering
I also use
g.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
g.CompositingQuality = Drawing2D.CompositingQuality.HighSpeed
g.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
I don't paint a BackGround to gain time.

I used a code profiler to determine the bottlenecks and speed up several
things. the only thing that still takes much time is the method which is
actually painting every time the image: "g.DrawImage(fe.BackgroundImage,
rectB)". I know i could get faster using DrawimageUnscaled, but because ot
he cell's width etc changes I can't use it here.

So I really think there isn't any more room left to make other improvements.
So that's why i really would like to know how I have to paint an image with
DirectX. Is this really such a hard question? Just painting an image with
DirectX?


Aug 2 '05 #16
Hi,

Thanks a lot for the great explication and nice hints!
For the moment I'm using an event for each Cell to define the parameters of
it (background image, forgroundimage etc). But I guess that I will gain the
most in speed when using 1 default image for each column, that I resize on
every column-resize?

Just one question: How did you do the stuff with the place-holder image and
the worker thread-stuff?? It seems quit interesting to me. Is there a
possiblity to knwo which image is not yet prerendered? And how does the
prerendering principe acutally works?

Thanks,

Pieter
"Chris Fraley" <Chris Fr****@discussions.microsoft.com> wrote in message
news:4A**********************************@microsof t.com...
Your description below is not quite consistent:
I prerender my images: that speeded up things a lot.
I know i could get faster using DrawimageUnscaled, but because
the cell's width etc changes I can't use it here.


You are missing a big optimization if your "prerendering" code does not

also prerender to the ultimate size you're going to display. Stretching
operations are very expensive--far more so that bpp changes--you must arrange your code to minimize the number of calls to DrawImage() over the course of scrolling, otherwise you haven't optimized fully. (Technically, calling
DrawImage() with the width/height of the bitmap will be the same performance as DrawImageUnscaled(), so the whole idea is to avoid stretching (or
shrinking) the image during critical performance times.)

My other concern is with your statement:
1. Format32bppPArgb pixel format is not the correct choice for optimum
performance; As this will only increase performance if the user is running at 32bpp

(and not, say, 16bpp). Also, leaving Alpha information in the format seems
suspicious to me--it seems that would means DrawImage() has more work to do. In any case, I believe the correct way to optimize this is to use:
bmp = new Bitmap(width, height, graphics)
Where graphics was created as a "screen compatible" graphics (e.g. the one
you get during a paint event). This will ensure the pixel format matches
what eventually will go on the screen. Note that this can get complicated
for multi-monitor support (as each monitor can run at a different pixel
depth), so sticking with PixelFormat.Format32bppRgb might be warranted to
avoid these issues.

A final note: Never use the ImageAttribute parameter to DrawImage() (unless, of course, you absolutely must), as this will massively slow things down.

I have done this quite successfully for a grid of picture thumbnails, and it scrolls lightning fast. In my case, images that were not yet pre-rendered
got a place-holder image until a worker thread generated a thumbnail. This entirely removes the slow stretch operation from the painting code, which is always a good thing to do.

--Chris Fraley

"DraguVaso" wrote:
I prerender my images: that speeded up things a lot.
I put al my images into the Format32bppPArgb-Pixelformat
I use double buffering
I also use
g.InterpolationMode = Drawing2D.InterpolationMode.NearestNeighbor
g.CompositingQuality = Drawing2D.CompositingQuality.HighSpeed
g.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
I don't paint a BackGround to gain time.

I used a code profiler to determine the bottlenecks and speed up several
things. the only thing that still takes much time is the method which is
actually painting every time the image: "g.DrawImage(fe.BackgroundImage,
rectB)". I know i could get faster using DrawimageUnscaled, but because ot he cell's width etc changes I can't use it here.

So I really think there isn't any more room left to make other improvements. So that's why i really would like to know how I have to paint an image with DirectX. Is this really such a hard question? Just painting an image with DirectX?

Aug 3 '05 #17
What is the layout ? "One image for each cell" would means you have really a
distinct image in each cell ? Or do you meant this is the same image or
several images based on some kind of criteria.

In case your design is to use the same picture in several cells, you could
see if you could create a scaled version of the image and use it for all
cells that have the same width/height (which is likely if you paint the same
images in all columns).

Before doing something as radical as an API change, you could for example
try to write a test application that really draws those bitmaps in a fully
optimized way (ie. scaled, no format change when blitting etc...). It should
give you an idea of how fast you can go. You'll then sacrifice a bit of time
to create those optimal conditions...

Good luck.
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:eH**************@TK2MSFTNGP12.phx.gbl...
I'm trying to use the TextureBrush, but it doesn't give the effect Iwant it to have: it doesn't put in every cell 1 image, but puts the image x times
next to each other, independent of the cell-sizes... What I need is: one
image for each cell, and the image should be adapted to the cell-size... I
tried with the Wrapmode.Clamp, but that just draws the image only one time: in the left upper corner of my DataGrid... :-/

"Patrice" <no****@nowhere.com> wrote in message
news:%2****************@TK2MSFTNGP15.phx.gbl...
See the TexturedBrush class. A brush is used to "fill in" something. It can
be a "solid" color but also an image. See it as a kind of wallpaper (sorry
for my poor English).
So you want to render in each cell a different bitmap ? Each bitmap is
stretched to fit in the cell ?

I'm not sure what is the graphics aspect you want but you could also see

if
a new strategy could help such as grabbing the datagrid as a bitmap and
combining it as a whole with perhaps a transparent color.

Using DirectX is IMO a bit risky for such an application as it will
introduce a new dependency (for example if the target platform doesn't

have
DX9 installed it won't work) plus the result will depend on the hardware
support and finally you'll have likely some problems as you'll likely have to combine GDI/DirectX.

As a whole it doesn't seem to me that such a requirement should trigger

the
use of DirectX. If you really want to go this route, you could perhaps try to render a stretched bitmap "cells" time at an arbitrary location. It
should already give you the maximum improvment you could get over using
GDI+.

Good luck.
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:%2****************@TK2MSFTNGP09.phx.gbl...
I don't get it really: How can I use a Brush it I want to paint an image?
I
thought a Brush is jsut one color, not an image? Or am I wrong?
"Patrice" <no****@nowhere.com> wrote in message
news:em**************@TK2MSFTNGP14.phx.gbl...
> What method are you using ? Using a brush seems quite quick...
> (narrowed down to
>

microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawing,
> microsoft.public.dotnet.general)
>
>
> --
> Patrice
>
> "Patrice" <no****@nowhere.com> a écrit dans le message de
> news:O8***************@tk2msftngp13.phx.gbl...
> > I meant not as a whole but broken into steps. How much time does it take
> to
> > render how many cells ? What if you try to render a bitmap the
same number
> > of times ? Especially keep ind mind that there are some subtles things > that
> > could slow down the process such as stretching or doing some

operations
> each
> > time you draw a cell rather than once etc...
> >
> > You could also see if alternate approaches may help such as drawing the
> > datagrid as a bitmap with a transparent color on a backgrround bitmap. > >
> > DirectX is a low level API to discuss with graphics hardware and

doesn't
> > provide any GDI integration. IMO would be much more complex and I

still
> > suspect you have room left for improvments...
> >
> > --
> >
> > Patrice
> >
> > "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
> > news:ey**************@TK2MSFTNGP10.phx.gbl...
> > > Well that's exactly what made me decide which to use DirectX:
for every
> > cell
> > > it has to paint an image, and this has to happen on every paint of
my
> > > datagrid. So everytilme somebody scrolls, clicks in it, etc. I timed it,
> > and
> > > it takes the most time of my whole application (after using my
> application
> > > for some seconds it has painted the same hing already more tahn 4000 > > > times...) ! I'm trying to make it faster tha past days, and imrpoved it
> > > already a lot, but I saw the only improvement i can make now is

using
> > > DirectX...
> > >
> > >
> > > "Patrice" <no****@nowhere.com> wrote in message
> > > news:eR**************@tk2msftngp13.phx.gbl...
> > > > Have you timed to find out what the problem is ? DirectX would

more
> > likely
> > > > help if you repeateadly draw the whole (updated) thing. Here you just
> > > have
> > > > to draw this one time before there is some other kind of
interaction.
> > > >
> > > > Before switching to a whole new method I would investigate (in
> > particular
> > > I
> > > > would time) the current code to find out where is spent the
time > > budget...
> > > >
> > > > (and next time thanks for trying to narrow down the groups to

which
> you
> > > > posts).
> > > > --
> > > > Patrice
> > > >
> > > > "DraguVaso" <pi**********@hotmail.com> a écrit dans le message

de > > > > news:ek**************@TK2MSFTNGP09.phx.gbl...
> > > > > Hi,
> > > > >
> > > > > I have an inherited DataGrid, that does lots of extra stuff. For > > exemple
> > > > > drawing a backgroundimage in every cell. The problem is that

it's
> > taking
> > > > too
> > > > > much time (using gdi+), so I want to do it using DirectX. I
> downloaded
> > > > > already the DSK etc, but I can't find how I need to draw an

image
on
> a
> > > > given
> > > > > position. I don't need stuff to write advanced 3D-games, just > painting
> > > > that
> > > > > image. Can anybody help me with this? I'm already looking
for this
> the
> > > > whole
> > > > > afternoon :-/
> > > > >
> > > > > I learned already that I shouldn't use DirectDraw (not

supported > > > anymore)
> > > > > but Direct3D? But that's really all I know yet.
> > > > >
> > > > > Basicly I jsut need to be able to draw an imahe (jpg,

bitmap) on
a
> > Form
> > > in
> > > > > VB.NET: as simple and as fast as possible.. :-)
> > > > >
> > > > > Thanks a lot in advance,
> > > > >
> > > > > Pieter
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Aug 3 '05 #18
I meant fully optimized even if not applicable in the real app. The goal is
to have an idea about the highest level of performance and to see if the
real app is close.

--

"Patrice" <no****@nowhere.com> a écrit dans le message de
news:u%****************@TK2MSFTNGP10.phx.gbl...
What is the layout ? "One image for each cell" would means you have really a distinct image in each cell ? Or do you meant this is the same image or
several images based on some kind of criteria.

In case your design is to use the same picture in several cells, you could
see if you could create a scaled version of the image and use it for all
cells that have the same width/height (which is likely if you paint the same images in all columns).

Before doing something as radical as an API change, you could for example
try to write a test application that really draws those bitmaps in a fully
optimized way (ie. scaled, no format change when blitting etc...). It should give you an idea of how fast you can go. You'll then sacrifice a bit of time to create those optimal conditions...

Good luck.
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:eH**************@TK2MSFTNGP12.phx.gbl...
I'm trying to use the TextureBrush, but it doesn't give the effect Iwant it
to have: it doesn't put in every cell 1 image, but puts the image x times
next to each other, independent of the cell-sizes... What I need is: one
image for each cell, and the image should be adapted to the cell-size... I tried with the Wrapmode.Clamp, but that just draws the image only one

time:
in the left upper corner of my DataGrid... :-/

"Patrice" <no****@nowhere.com> wrote in message
news:%2****************@TK2MSFTNGP15.phx.gbl...
See the TexturedBrush class. A brush is used to "fill in" something. It
can
be a "solid" color but also an image. See it as a kind of wallpaper (sorry for my poor English).
So you want to render in each cell a different bitmap ? Each bitmap is
stretched to fit in the cell ?

I'm not sure what is the graphics aspect you want but you could also
see if
a new strategy could help such as grabbing the datagrid as a bitmap
and combining it as a whole with perhaps a transparent color.

Using DirectX is IMO a bit risky for such an application as it will
introduce a new dependency (for example if the target platform doesn't

have
DX9 installed it won't work) plus the result will depend on the hardware support and finally you'll have likely some problems as you'll likely

have to combine GDI/DirectX.

As a whole it doesn't seem to me that such a requirement should trigger the
use of DirectX. If you really want to go this route, you could perhaps try to render a stretched bitmap "cells" time at an arbitrary location. It
should already give you the maximum improvment you could get over
using GDI+.

Good luck.
--
Patrice

"DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
news:%2****************@TK2MSFTNGP09.phx.gbl...
> I don't get it really: How can I use a Brush it I want to paint an

image?
I
> thought a Brush is jsut one color, not an image? Or am I wrong?
>
>
> "Patrice" <no****@nowhere.com> wrote in message
> news:em**************@TK2MSFTNGP14.phx.gbl...
> > What method are you using ? Using a brush seems quite quick...
> > (narrowed down to
> >
>

microsoft.public.dotnet.framework,microsoft.public .dotnet.framework.drawing,
> > microsoft.public.dotnet.general)
> >
> >
> > --
> > Patrice
> >
> > "Patrice" <no****@nowhere.com> a écrit dans le message de
> > news:O8***************@tk2msftngp13.phx.gbl...
> > > I meant not as a whole but broken into steps. How much time does it take
> > to
> > > render how many cells ? What if you try to render a bitmap the same > number
> > > of times ? Especially keep ind mind that there are some subtles

things
> > that
> > > could slow down the process such as stretching or doing some
operations
> > each
> > > time you draw a cell rather than once etc...
> > >
> > > You could also see if alternate approaches may help such as drawing the
> > > datagrid as a bitmap with a transparent color on a backgrround

bitmap.
> > >
> > > DirectX is a low level API to discuss with graphics hardware and
doesn't
> > > provide any GDI integration. IMO would be much more complex and I still
> > > suspect you have room left for improvments...
> > >
> > > --
> > >
> > > Patrice
> > >
> > > "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de > > > news:ey**************@TK2MSFTNGP10.phx.gbl...
> > > > Well that's exactly what made me decide which to use DirectX: for > every
> > > cell
> > > > it has to paint an image, and this has to happen on every paint of
my
> > > > datagrid. So everytilme somebody scrolls, clicks in it, etc. I

timed
> it,
> > > and
> > > > it takes the most time of my whole application (after using my
> > application
> > > > for some seconds it has painted the same hing already more
tahn
4000
> > > > times...) ! I'm trying to make it faster tha past days, and

imrpoved
> it
> > > > already a lot, but I saw the only improvement i can make now
is using
> > > > DirectX...
> > > >
> > > >
> > > > "Patrice" <no****@nowhere.com> wrote in message
> > > > news:eR**************@tk2msftngp13.phx.gbl...
> > > > > Have you timed to find out what the problem is ? DirectX would more
> > > likely
> > > > > help if you repeateadly draw the whole (updated) thing. Here you
> just
> > > > have
> > > > > to draw this one time before there is some other kind of
> interaction.
> > > > >
> > > > > Before switching to a whole new method I would investigate
(in > > > particular
> > > > I
> > > > > would time) the current code to find out where is spent the

time > > > budget...
> > > > >
> > > > > (and next time thanks for trying to narrow down the groups to which
> > you
> > > > > posts).
> > > > > --
> > > > > Patrice
> > > > >
> > > > > "DraguVaso" <pi**********@hotmail.com> a écrit dans le message de
> > > > > news:ek**************@TK2MSFTNGP09.phx.gbl...
> > > > > > Hi,
> > > > > >
> > > > > > I have an inherited DataGrid, that does lots of extra
stuff.
For
> > > exemple
> > > > > > drawing a backgroundimage in every cell. The problem is

that it's
> > > taking
> > > > > too
> > > > > > much time (using gdi+), so I want to do it using DirectX. I > > downloaded
> > > > > > already the DSK etc, but I can't find how I need to draw an image
> on
> > a
> > > > > given
> > > > > > position. I don't need stuff to write advanced 3D-games,

just > > painting
> > > > > that
> > > > > > image. Can anybody help me with this? I'm already looking for this
> > the
> > > > > whole
> > > > > > afternoon :-/
> > > > > >
> > > > > > I learned already that I shouldn't use DirectDraw (not

supported
> > > > anymore)
> > > > > > but Direct3D? But that's really all I know yet.
> > > > > >
> > > > > > Basicly I jsut need to be able to draw an imahe (jpg,

bitmap)
on
a
> > > Form
> > > > in
> > > > > > VB.NET: as simple and as fast as possible.. :-)
> > > > > >
> > > > > > Thanks a lot in advance,
> > > > > >
> > > > > > Pieter
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>



Aug 3 '05 #19
dh
Hello:

I have taken three images of type gif. i am not able to get the transparency
as well as rotation. and also i need the grouping of the images. I need some
sample code to solve this problem as i am new to this field.

i am using the following code for transparency.

Color col = bm.GetPixel( 1, 1 );
picRT.Region = BitmapToRegion.Convert( bm, col,
TransparencyMode.ColorKeyTransparent);

But if i use this code i am not getting rotation. i will be thankful if u
help in regards
Dhanunjay
Sep 15 '05 #20
dh
Hello:

I have taken three images of type gif. i am not able to get the transparency
as well as rotation. and also i need the grouping of the images. I need some
sample code to solve this problem as i am new to this field.

i am using the following code for transparency.

Color col = bm.GetPixel( 1, 1 );
picRT.Region = BitmapToRegion.Convert( bm, col,
TransparencyMode.ColorKeyTransparent);

But if i use this code i am not getting rotation. i will be thankful if u
help in regards
Dhanunjay
Sep 15 '05 #21
dh
Hello:

I have taken three images of type gif. i am not able to get the transparency
as well as rotation. and also i need the grouping of the images. I need some
sample code to solve this problem as i am new to this field.

i am using the following code for transparency.

Color col = bm.GetPixel( 1, 1 );
picRT.Region = BitmapToRegion.Convert( bm, col,
TransparencyMode.ColorKeyTransparent);

But if i use this code i am not getting rotation. i will be thankful if u
help in regards
Dhanunjay
Sep 15 '05 #22

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

21
by: DraguVaso | last post by:
Hi, I have an inherited DataGrid, that does lots of extra stuff. For exemple drawing a backgroundimage in every cell. The problem is that it's taking too much time (using gdi+), so I want to do...
1
by: martinsmith160 | last post by:
Hi all I am trying to create a level builder tool for a final year project and im having some problems drawing. I have placed a picture box within a panel so i can scroll around the image which is...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
0
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.