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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 21:49   #1
Lost_Angel
 
Регистрация: 28.03.2012
Сообщений: 8
По умолчанию Из Дельфи в Билдер!

Пожалуйста...людиии!
Нужна помощь!
Нужно переписать код написанный на дельфях в билдоровский..никак не прошарю, хоть и похоже все до ужаса...
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ExtDlgs, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Image1: TImage;
    OpenPictureDialog1: TOpenPictureDialog;
    SavePictureDialog1: TSavePictureDialog;
    Button1: TButton;
    Button2: TButton;
    TrackBar1: TTrackBar;
    procedure Button1Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Contrast(Bitmap: TBitmap; Value: Integer; Local: Boolean);

  function BLimit(B: Integer): Byte;
  begin
    if B < 0 then
      Result := 0
    else if B > 255 then
      Result := 255
    else
      Result := B;
  end;

//Value - значение контрастности на отрезке [-100..100]
//Local - если True, то применяется "местный контраст",
//если False, то - "общий" (более красивый)

var
  Dest: pRGBTriple;
  x, y, mr, mg, mb,
    W, H, tr, tg, tb: Integer;
  vd: Double;

begin
  if Value = 0 then
    Exit;
  W := Bitmap.Width - 1;
  H := Bitmap.Height - 1;
  if Local then
  begin
    mR := 128;
    mG := 128;
    mB := 128;
  end
  else
  begin
    tr := 0;
    tg := 0;
    tb := 0;
    for y := 0 to H do
    begin
      Dest := Bitmap.ScanLine[y];
      for x := 0 to W do
      begin
        with Dest^ do
        begin
          Inc(tb, rgbtBlue);
          Inc(tg, rgbtGreen);
          Inc(tr, rgbtRed);
        end;
        Inc(Dest);
      end;
    end;
    mB := Trunc(tb / (W * H));
    mG := Trunc(tg / (W * H));
    mR := Trunc(tr / (W * H));
  end;
  if Value > 0 then
    vd := 1 + (Value / 10)
  else
    vd := 1 - (Sqrt(-Value) / 10);
  for y := 0 to H do
  begin
    Dest := Bitmap.ScanLine[y];
    for x := 0 to W do
    begin
      with Dest^ do
      begin
        rgbtBlue := BLimit(mB + Trunc((rgbtBlue - mB) * vd));
        rgbtGreen := BLimit(mG + Trunc((rgbtGreen - mG) * vd));
        rgbtRed := BLimit(mR + Trunc((rgbtRed - mR) * vd));
      end;
      Inc(Dest);
    end;
  end;
end;

procedure TForm1.TrackBar1Change(Sender: TObject); 
begin
Self.Image1.Parent.DoubleBuffered := true;
Contrast(Image1.Picture.Bitmap,TrackBar1.Position,true);
Image1.Refresh; 
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TrackBar1.Position:=0;
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

end.
Lost_Angel вне форума Ответить с цитированием
Старый 19.04.2012, 22:06   #2
Drugnir
Форумчанин
 
Регистрация: 17.11.2010
Сообщений: 262
По умолчанию

Можно и так.
http://www.cyberguru.ru/programming/...ode-using.html
Drugnir вне форума Ответить с цитированием
Старый 20.04.2012, 13:27   #3
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Код:

  function BLimit(B: Integer): Byte;
  begin
    if B < 0 then
      Result := 0
    else if B > 255 then
      Result := 255
    else
      Result := B;
  end;
Код:
BYTE __fastcall BLimit(int B)
{
  if(B<0)
      return 0;
  else if(B > 255)
      return 255;
   return B;
}


Код:
procedure TForm1.TrackBar1Change(Sender: TObject); 
begin
Self.Image1.Parent.DoubleBuffered := true;
Contrast(Image1.Picture.Bitmap,TrackBar1.Position,true);
Image1.Refresh; 
end;


Код:
 void __fastcall TForm1::TrackBar1Change( TObject* Sender)
{
   this->Image1->Parent->DoubleBuffered = true;
   Contrast(Image1->Picture->Bitmap,TrackBar1->Position,true);
   Image1->Refresh();
}
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 20.04.2012, 20:05   #4
Lost_Angel
 
Регистрация: 28.03.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Krok27 Посмотреть сообщение
Код:

  function BLimit(B: Integer): Byte;
  begin
    if B < 0 then
      Result := 0
    else if B > 255 then
      Result := 255
    else
      Result := B;
  end;
Код:
BYTE __fastcall BLimit(int B)
{
  if(B<0)
      return 0;
  else if(B > 255)
      return 255;
   return B;
}


Код:
procedure TForm1.TrackBar1Change(Sender: TObject); 
begin
Self.Image1.Parent.DoubleBuffered := true;
Contrast(Image1.Picture.Bitmap,TrackBar1.Position,true);
Image1.Refresh; 
end;


Код:
 void __fastcall TForm1::TrackBar1Change( TObject* Sender)
{
   this->Image1->Parent->DoubleBuffered = true;
   Contrast(Image1->Picture->Bitmap,TrackBar1->Position,true);
   Image1->Refresh();
}
Благодарю))
Lost_Angel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
таблицы подстановок в дельфи(базы данных в дельфи) ManiagoZ БД в Delphi 0 15.05.2011 15:07
билдер для C# MyXa Общие вопросы .NET 3 14.02.2011 14:15
из турбо си в си++ билдер 6 [ira] Помощь студентам 1 30.05.2010 11:45
Билдер в Delphi garyanikin Общие вопросы Delphi 7 16.01.2010 03:50