Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / .NET Framework / New Users / July 2005

Tip: Looking for answers? Try searching our database.

display an image with BitBlt (in Paint-method)

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
DraguVaso - 28 Jul 2005 09:13 GMT
Hi,

In the override of the Paint-method of a DataGridTextBoxColumn I want to
show an image with BitBlt, to see what I can gain there on performance.
The problem is: It doesn't show me the image in the DataGrid-Cell's, but a
black background...

Does anybody has any idea what I am doing wrong?

Thanks a lot in advance,

Pieter

   Declare Auto Function BitBlt Lib "GDI32.DLL" ( _
        ByVal hdcDest As IntPtr, _
        ByVal nXDest As Integer, _
        ByVal nYDest As Integer, _
        ByVal nWidth As Integer, _
        ByVal nHeight As Integer, _
        ByVal hdcSrc As IntPtr, _
        ByVal nXSrc As Integer, _
        ByVal nYSrc As Integer, _
        ByVal dwRop As Int32) As Boolean
   Private Const SRCCOPY As Integer = &HCC0020

   Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal
bounds As Rectangle, ByVal source As CurrencyManager, ByVal rowNum As
Integer, ByVal backBrush As Brush, ByVal foreBrush As Brush, ByVal
alignToRight As Boolean)
               Dim rectB As New Rectangle
               rectB = bounds
               rectB.Width = rectB.Width + 1
               Dim g3 As Graphics
               g3 = Graphics.FromImage(fe.BackgroundImage)
'fe.BackgroundImage is a bitmap I read from a stream (PixelFormat =
Format32bppPArgb)
               Dim HDC1 As IntPtr = g.GetHdc
               Dim HDC2 As IntPtr = g3.GetHdc
               Me.BitBlt(HDC1, 0, 0, rectB.Width, rectB.Height, HDC2, 0, 0,
SRCCOPY)
               g.ReleaseHdc(HDC1)
               g3.ReleaseHdc(HDC2)
...
James Westgate - 28 Jul 2005 09:41 GMT
Hi,

You need to create a compatible device context. See my post on the 19th of
July under Graphics.DrawIMage uses More memory

James

Signature

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

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

> Hi,
>
[quoted text clipped - 40 lines]
>                g3.ReleaseHdc(HDC2)
> ...
Dennis - 29 Jul 2005 02:40 GMT
Here's some code I use to copy part of a bitmap image to the ClipRectangle
passed for repainting.  Note that v_BackImage is my background bitmap I
defined as a private variable in my overall class.

  Private Sub me_Paint(ByVal sender As Object, ByVal e As
System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
       Dim hdcControl As IntPtr = e.Graphics.GetHdc
       Dim hdcBitmapDC As IntPtr = gph.GetHdc
       Dim hdcBitmapHandle As IntPtr = v_BackImage.GetHbitmap  'This takes
up 85% of time
       SelectObject(hdcBitmapDC, hdcBitmapHandle)
       BitBlt(hdcControl, e.ClipRectangle.X, e.ClipRectangle.Y,
e.ClipRectangle.Width, e.ClipRectangle.Height, hdcBitmapDC,
e.ClipRectangle.X, e.ClipRectangle.Y, &HCC0020)
       DeleteObject(hdcBitmapHandle)
       gph.ReleaseHdc(hdcBitmapDC)
       e.Graphics.ReleaseHdc(hdcControl)
exit sub

       '**** Explaination of above *********
       ' BitBlt copies the graphic data to a Device Context. A Device
Context is a data structure maintained by GDI. A device context is
       'associated with a particular display device, such as a printer or
video display. For a video display, a device context is usually
       'associated with a particular window on the display, but it can also
be an offscreen display.

       'What you do, is create a Device Context and then associate a Bitmap
with the Device Context ( with SelectObject ). Then you
       ' draw to the Device Context ( using BitBlt ) to alter the Bitmap.
You can't use GDI functions to directly draw to a bitmap.

       'After using a Device Context, you need to clean stuff up ( release
and delete ) or else the device context stays locked and
       ' other attempts to draw again will fail. Also not cleaning up will
result in memory leaks.
Signature

Dennis in Houston

> Hi,
>
[quoted text clipped - 47 lines]
> >                g3.ReleaseHdc(HDC2)
> > ...

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.