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

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

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

Восстановить пароль

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

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

Есть форма. Фон у неё изображение в canvas. Как осветлить это изображение не редактируя. Пример: показывает осветленным, а при сохранение нормальный цвет.

А так же, нужно что бы DrawFocusRect внутри, был нормального цвета..

Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Jpeg;

type
  TForm3 = class(TForm)
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    Capturing : bool;
    Captured : bool;
    StartPlace : TPoint;
    EndPlace : TPoint;
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  Capturing : bool;
  Captured : bool;
  StartPlace : TPoint;
  EndPlace : TPoint;
  R: TRect;

implementation

uses Unit1;

{$R *.dfm}

function MakeRect(Pt1 : TPoint; Pt2 : TPoint) : TRect;
begin
  if pt1.x < pt2.x then
  begin
    Result.Left := pt1.x;
    Result.Right := pt2.x;
  end
  else
  begin
    Result.Left := pt2.x;
    Result.Right := pt1.x;
  end;

  if pt1.y < pt2.y then
  begin
    Result.Top := pt1.y;
    Result.Bottom := pt2.y;
  end
  else
  begin
    Result.Top := pt2.y;
    Result.Bottom := pt1.y;
  end;
end;


procedure TForm3.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Captured then
  DrawFocusRect(Form3.Canvas.Handle,MakeRect(StartPlace,EndPlace));
  StartPlace.x := X;
  StartPlace.y := Y;
  EndPlace.x := X;
  EndPlace.y := Y;
  DrawFocusRect(Form3.Canvas.Handle,MakeRect(StartPlace,EndPlace));
  Capturing := true;
  Captured := true;
end;

procedure TForm3.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Capturing then
  begin
    DrawFocusRect(Form3.Canvas.Handle,MakeRect(StartPlace,EndPlace));
    EndPlace.x := X;
    EndPlace.y := Y;
    DrawFocusRect(Form3.Canvas.Handle,MakeRect(StartPlace,EndPlace));
  end;
end;

procedure TForm3.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var bmp: TBitMap;
begin
  Capturing := false;
  R:= Rect(StartPlace.X, StartPlace.Y, EndPlace.X, EndPlace.Y);
  bmp:= TBitmap.Create;
  bmp.PixelFormat:= pf24bit;
  bmp.Height:= R.Bottom-R.Top;
  bmp.Width:= R.Right-R.Left;
  bmp.Canvas.CopyRect(bmp.Canvas.ClipRect, Canvas, R);
  Form1.Image1.Picture.Assign(bmp);
  bmp.Destroy;
  Form3.Close;
end;

end.
Заранее спасибо.
sergeyrulit вне форума Ответить с цитированием
Старый 08.08.2010, 16:46   #2
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
По умолчанию

И еще вопрос, код которой выше заносит обрезанную картинку в Image1, а потом в юнит1 идет сохранение.. Сохраненное изображение выглядит так: http://www.ipicture.ru/uploads/100808/4lth9upFqo.jpg... Видите эти рамки от DrawFocusRect, как их убрать?
sergeyrulit вне форума Ответить с цитированием
Старый 08.08.2010, 16:55   #3
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
А так же, нужно что бы DrawFocusRect внутри, был нормального цвета..
Цитата:
Canvas светлее, внутри DrawFocusRect нормальный цвет.
Что-то очень запутано... Тебе тужно выделение выделять или результат копироваия?
Цитата:
Код:
procedure TForm3.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var bmp: TBitMap;
begin
  Capturing := false;
  R:= Rect(StartPlace.X, StartPlace.Y, EndPlace.X, EndPlace.Y);
  bmp:= TBitmap.Create;
  bmp.PixelFormat:= pf24bit;
  bmp.Height:= R.Bottom-R.Top;
  bmp.Width:= R.Right-R.Left;
  bmp.Canvas.CopyRect(bmp.Canvas.ClipRect, Canvas, R);
  Form1.Image1.Picture.Assign(bmp);
  bmp.Destroy;
  Form3.Close;
end;
для чего в этой процедуре использовать битмап который в конечном счете отправляется в TImage?
Код:
procedure TForm3.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Capturing := false;
  R:= Rect(StartPlace.X, StartPlace.Y, EndPlace.X, EndPlace.Y);
  with form1.Image1 do begin
    Height:= R.Bottom-R.Top;
    Width:= R.Right-R.Left;
    Canvas.CopyRect(Canvas.ClipRect, self.Canvas, R);
  end;
  Form3.Close;
end;
x128 вне форума Ответить с цитированием
Старый 08.08.2010, 16:58   #4
sergeyrulit
Пользователь
 
Регистрация: 12.05.2010
Сообщений: 53
По умолчанию

Цитата:
Что-то очень запутано... Тебе тужно выделение выделять или результат копироваия?
Нужно осветлить белым цветом все что за линии выделения (DrawFocusRect). А все что внутри линии выделения (DrawFocusRect) нормального цвета что бы оставалось.
sergeyrulit вне форума Ответить с цитированием
Старый 08.08.2010, 17:10   #5
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Запутанно... Самый быстрый вариант в лоб - накрывать сверху ещё 4-мя Image с загруженной полупрозрачной иконкой...
Если я правильно понял цель.....
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 08.08.2010, 18:03   #6
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

В таком случае тебе понадобится два битмапа, один с оригиналом изображения, второй с увеличеной яркостью. В обработчиках перед DrawFocusRect копировать битмап с измененной яркостью и потом копировать нужный фрагмент из оригинала.
x128 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DrawFocusRect sergeyrulit Общие вопросы Delphi 0 07.08.2010 20:46
Нормальный шейпер Utkin Софт 2 01.04.2010 14:21
Каким образом можно изменять цвет фона и цвет шрифта в Label? jungle Win Api 17 21.09.2009 00:38
Как с помощью JavaScript изменить цвет фона ячеек в таблице,так что бы можно было выбрать цвет из списка Gotessa JavaScript, Ajax 1 09.05.2009 16:05
нормальный алгоритм Маркова Gimi Помощь студентам 1 20.01.2009 19:07