What you appear to be saying is that a TImage is MEANT to have
a pic in it and that when I do not do this I run into problems.  I do
not like work-arounds so I can use things in non-standard ways.  I
feel that it is better to use things (components in this case) in the
correct way.

I like the ideas in your last example.  It appears as though this is
the "right" way to achieve what I want to achieve.  I will have a play
with it tomorrow (after I get up today actually) and see if it does what
I want but I suspect that it is the way to go.

Thanks for you time.

Chrissy.

BTW - based on the name of this mailing list it is possible that it is
a good idea to write OP code - but hey, whatever works for you.



From: Corey Murtagh wrote
> Chrissy R wrote
> <snip>
> >> Something like:
> >
> >You may be correct - BUT - I don't understand that code.  What is
> >fastcall?  What is the "::"?  What is "*" before "Sender"?  What is
> >"->".  This does  not look like the Delphi code I write.
>
> Sorry, it was Borland C++ Builder code.  I just copied it from an old
> project of mine.  I've just had it pointed out to me that I should
> really present code examples in Delphi OP, so here goes:
>
> procedure TViewForm.ViewPanelResize(Sender: TObject);
> begin
>   framebuffer.Width := Image1.Width;
>   framebuffer.Height := Image1.Height;
>   Image1.Picture.Assign(framebuffer);
> end;
>
> >> This forces the bitmap that the TImage's picture is stored in to be
> >> properly resized when the form size changes, which should fix the
> >> problem with not being able to draw to the whole image.
> >
> >That makes sense.  It appears that a TImage needs an image to be
> >in it.
>
> When the TImage is created the TImage.Picture member is correctly
> initialised with a TPicture of the correct dimensions to store the
> actual image information in.  Unfortunately when you resize the TImage
> it doesn't automatically resize the TPicture, so if you make the TImage
> larger you get blank bits where the Picture isn't big enough.  By
> assigning a larger TBitmap to the Picture you force it to the correct
> dimensions.
>
> >> Can't say I've tried to use a TImage that size.  However a
> >> 2048x2048x24 image is going to take up something like 12meg of ram,
> >> which is a little expensive.  If you really need to support images
> >> this size I'd suggest trying something a little less memory hungry,
> >> even if it means a relatively large amount of time spent drawing.
> >
> >I cannot have it slow to draw.  I need fast redrawing and efficient
> >programming.  Students will be working on this code so it has to be
> >simple and not at all convoluted AND it has to be fast and flicker free
> >in the drawing.
>
> If you draw to a TBitmap and then copy it to the TImage using Image.
> Canvas.CopyRect(), then there is no flicker that I can detect.  The
> image isn't cleared before the bitmap is copied.  As for the memory...
> if you set the TBitmap.PixelFormat to pf8bit you'll get a 256-color
> bitmap which will be 1/3rd as large as an equivalent 24-bit bitmap.
> It's also faster to draw to than 24bit, although very slightly slower
> when copying to the screen.
>
> If redrawing every time the scrollbars move is too slow, how about
> using the same method but maintaining a complete copy of the image in a
> TBitmap?  Then you select the appropriate section to copy into the
> smaller TImage.  Let me see if I can express this in OP:
>
> procedure TViewForm.UpdateImage;
> var
>   sRect, dRect: TRect;
>   x, y: Integer;
> begin
>   x = HScrollBar.Position;
>   y = VScrollBar.Position;
>   dRect := Image1.Canvas.ClipRect;
>   sRect := dRect;
>   Inc(sRect.Left,x);
>   Inc(sRect.Right,x);
>   Inc(sRect.Top,y);
>   Inc(sRect.Bottom,y);
>
>   Image1.Canvas.CopyRect(dRect, backbuffer.Canvas, sRect);
> end;
>
> Did that make any sense?  I'm not really comfortable writing OP :>
>
> Basically what I'm trying to achieve is to copy a rectangle the same
> size as the TImage from a selected position in a larger TBitmap.
>
>
> >Is there a component that is a line?  I want a line that can go on any
> >angle and that I can select and pickup and move.
>
> Not a standard one, although there may be a third-party one floating
> around somewhere.



---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED] 
with body of "unsubscribe delphi"

Reply via email to