Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2010, 15:35   #1
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
По умолчанию Вырезать картинку с канвы.

Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Permission:= true;
  StartX:= X;
  StartY:= Y;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  BufferScreenShot: TBitMap;
begin
  if Permission then
  begin
    try
      BufferScreenShot:= TBitMap.Create;
      BufferScreenShot.Assign(MaskScreenShotImage);
      BufferScreenShot.Canvas.Brush.Bitmap:= SourceScreenShotImage;
      BufferScreenShot.Canvas.Pen.Width:= 1;
      BufferScreenShot.Canvas.Pen.Style:= psDot;
      BufferScreenShot.Canvas.Pen.Color:= ClRed;
      BufferScreenShot.Canvas.Rectangle(StartX, StartY, X, Y);
      Form1.Canvas.Draw(0,0, BufferScreenShot);
    finally
      BufferScreenShot.Free;
    end;
  end;
end;


procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  RCut: TRect;
  DoneScreenShot: TBitMap;
begin
  Permission:= false;
  RCut:= Rect(StartX, StartY, X, Y);
  DoneScreenShot:= TBitMap.Create;
  DoneScreenShot.PixelFormat:= pf24bit;
  DoneScreenShot.Height:= RCut.Bottom - RCut.Top;
  DoneScreenShot.Width:= RCut.Right - RCut.Left;
  DoneScreenShot.Canvas.CopyRect(DoneScreenShot.Canvas.ClipRect,   SourceScreenShotImage.Canvas, RCut);
  DoneScreenShot.SaveToFile('C:\MyBitmap.bmp');
  DoneScreenShot.Free;
end;
Пытаюсь вырезать через CopyRect, но возникает ошибка: Out of system resources. Почему? Можно по другому вырезать?

Последний раз редактировалось sergeyrulit; 21.11.2010 в 15:38.
sergeyrulit вне форума Ответить с цитированием
Старый 21.11.2010, 16:40   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

В свое время Алар дал такой пример :
Код:
var 
ScreenDC:HDC; 
Canvas:TCanvas; 
Image3:TImage;
begin 
ScreenDC := GetDC(0); 
Canvas:=TCanvas.Create();
Canvas.Handle:=ScreenDC;
Image3 := TImage.Create(nil);
Image3.Width := 200;
Image3.Height := 200;
Image3.Canvas.CopyRect(Rect(0, 0, Image3.Width, Image3.Height), Canvas, Rect(0, 0, 200, 200));
Image1.Picture.Assign(Image3.Picture);
ReleaseDC(0,ScreenDC);
Canvas.Free; 
end;
Работает отлично.
mihali4 вне форума Ответить с цитированием
Старый 21.11.2010, 19:08   #3
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
По умолчанию

Работает, но через раз . Иногда ошибка: неверно указан параметр (в строке Image3.Canvas.CopyRect)..

Не нужно цитировать предыдущее сообщение! Это - флуд.
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
А кроме кнопки "Цитата" внизу есть простое окно для ввода своего сообщения.
Или маленькая кнопочка "Быстрый ответ" справа от кнопки "Цитата".
Попадаете туда же.
Модератор

Последний раз редактировалось mihali4; 21.11.2010 в 20:20.
sergeyrulit вне форума Ответить с цитированием
Старый 21.11.2010, 19:22   #4
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

не совсем понятно, что нужно ТС, но всё же приведу свой полностью рабочий пример копирования изображения.

Код:
var
  DC : HDC;
  Bmp : TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    DC := GetDC( 0 );

    Bmp.SetSize( 100, 100 );
    BitBlt( Bmp.Canvas.Handle, 0, 0, 100, 100, DC, 0, 0, SRCCOPY );
    Bmp.SaveToFile( 'c:\test.bmp' );

    ReleaseDC( 0, DC );
  finally
    Bmp.Free;
  end;
end;
maxionans вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вырезать диапазон 0mega Microsoft Office Excel 1 20.09.2010 07:36
Как получить картинку при наведении на другую картинку (ссылку) seeker1 JavaScript, Ajax 8 04.07.2010 19:42
очистка канвы Juffin Общие вопросы Delphi 1 17.05.2009 14:44
Перерисовка канвы Bayazet Мультимедиа в Delphi 4 09.04.2009 22:14
перерисовка канвы Bayazet Общие вопросы Delphi 14 27.01.2009 16:02