Копирование Image в Image

Тема в разделе "Delphi - Multimedia, Графика, Игры", создана пользователем -, 26 авг 2005.

  1. Гость

    Такая трабла… На форме 2 компонента Image. Первый имеет свойство Stretch=True, второй – Stretch=False. Необходимо скопировать содержимое первого Image во второй 1:1. Копирую следующим образом:

    Код (Text):
    var
    SRect, DRect : TRect;
    begin
    SRect:=Rect(Image1.Left,Image1.Top,Image1.Width,Image1.Height);
    DRect:=Rect(0,0,Image2.Width,Image2.Height);
    Image2.Canvas.CopyRect(DRect, Form1.Canvas, SRect);
    end;
    Однако выходит следующий баг, связанный со смещением сетки:

    [​IMG]

    Что делать?
     
  2. Barmutik

    Barmutik Гость

    Можно попробовать так:

    Код (Text):
     Image2.Canvas.StretchDraw(Rect(0, 0, Image1.Width, Image1.Height),
     Image1.Picture.Graphic);
     
  3. Гость

    Barmutik, код копирует замечательно. Спасибо! Дело в том, что сетка создана на основе прозрачных компонентов Shape, находящихся на компоненте Image1. Мне бы хотелось сделать снапшот участка формы, ограниченного размерами Image1 и результат загрузить в Image2. На самом деле я пишу нечто вроде графического анализатора и наличие сетки на изображении крайне необходимо для алгоритма анализа.
     
  4. Barmutik

    Barmutik Гость

    Ясно ... ну я думаю, что Вы смогли сами модифицировать код предложенный мною под реализацию Вашей задачи.
     
  5. Гость

    Потратил дополнительно около часа, чтобы изобрести… возможно и велосипед – новый код :) Суть заключается в снятии скриншота всей экранной области, начальные координаты X,Y которой соответствуют экранным координатам компонента Image1, при помощи функции bitblt. Результат записывается в динамически созданный Bitmap, который в последующем загружается в Image2.

    Код (Text):
    var
    bmp: TBitmap;
    DC: HDC;
    SrcImgPoint : TPoint;
    begin
    bmp:=TBitmap.Create;
    bmp.Height:=Image1.Height;
    bmp.Width:=Image1.Width;
    DC:=GetDC(0);
    SrcImgPoint:=Image1.ClientToScreen(Point(Image1.Left,Image1.Top));
    bitblt(bmp.Canvas.Handle,
        0, 0,
        Image1.Width, Image1.Height,
        DC,
        SrcImgPoint.X-Image1.Left, SrcImgPoint.Y-Image1.Top,
        SRCCOPY);
    Image2.Picture.Bitmap:=bmp;
    ReleaseDC(0, DC);
    end;
     
  6. Barmutik

    Barmutik Гость

    :) Реально велосипед :)
     
  7. Гость

  8. Barmutik

    Barmutik Гость

    Аккуратно сделано ...

    Только может если делаете прозрачность окна может делать его части .. только ту что совместить надо ... а не всего окна ...
     
  9. Гость

    Для: Barmutik:
    Спасибо! Кстати, идея о создании прозрачности региона была, но в графике я не очень силен. Поэтому пришлось ограничиться тем, что стандартно предлагает Delphi 6.0 по управлению прозрачностью.
     
Загрузка...

Поделиться этой страницей