Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Мультимедиа в Delphi
Регистрация

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

Ответ
 
Опции темы
Старый 28.03.2008, 19:20   #1
Altera
Одинокий кодер
Профессионал
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
Репутация: 675

skype: ak_altera
Счастье Как изменить яркость picture-а?

Как изменить яркость picture-а?
Altera вне форума   Ответить с цитированием
Старый 28.03.2008, 19:32   #2
mutabor
Телепат с дипломом
Профессионал
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,931
Репутация: 1570

icq: 401708834
По умолчанию

Гугл поломался?
mutabor вне форума   Ответить с цитированием
Старый 29.03.2008, 10:08   #3
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Я использую вот это:

Код:

procedure ChangeContrast(BitMap: TBitmap; Lighten: Boolean; Percent: Byte;
  BColor: TColor);
var
  i, j: Integer;
  t: pRGBTriple;
  r, g, b: extended;
begin
  BitMap.PixelFormat := pf24bit;
  for i := 0 to BitMap.Height - 1 do
  begin
    t := BitMap.Scanline[i];
    for j := 0 to BitMap.Width - 1 do
    begin
      if TColor(RGB(t^.rgbtRed, t^.rgbtGreen, t^.rgbtBlue)) <> BColor then
      begin
        b := t^.rgbtBlue;
        g := t^.rgbtGreen;
        r := t^.rgbtRed;

        if Lighten then
        begin
          b := b + ((b / 255) * Percent);
          g := g + ((g / 255) * Percent);
          r := r + ((r / 255) * Percent);
        end else
        begin
          b := b - ((b / 255) * Percent);
          g := g - ((g / 255) * Percent);
          r := r - ((r / 255) * Percent);
        end;
        
        if r > 255 then r := 255;
        if r < 0 then r := 0;
        if g > 255 then g := 255;
        if g < 0 then g := 0;
        if b > 255 then b := 255;
        if b < 0 then b := 0;

        t^.rgbtBlue := Round(b);
        t^.rgbtGreen := Round(g);
        t^.rgbtRed := Round(r);
      end;
      inc(t);
    end;
  end;
end;

__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 03.12.2008, 23:41   #4
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
Репутация: 124

icq: 312437304
По умолчанию

насчет яркости.....

Я меняю яркость вот так:
Код:

var
  Form2: TForm2;
    OrigBmp: TBitmap;
  a,c,e:integer;
  RedValue1,GreenValue1,BlueValue1:integer;
  flag:boolean;

const
  MaxPixelCount   =  32768;

type
  pRGBArray  =  ^TRGBArray;
  TRGBArray  =  ARRAY[0..MaxPixelCount-1] OF TRGBTriple;


implementation

uses Unit1;

{$R *.dfm}


procedure TForm2.FormActivate(Sender: TObject);
var
Metafile:TMetafile;
MetaCanvas:TMetafileCanvas;
Bitmap:TBitmap;
jpeg: TJPEGImage;
Icon : TIcon;
begin
TrackBar1.Position:=0;
 if (ExtractFileExt(PathFile)='.bmp') then begin
 Bitmap:=TBitmap.Create;
 Bitmap.Assign(Form1.Image1.Picture.Bitmap);
 Image1.Picture.Bitmap.Assign(Bitmap);
 end;
if (ExtractFileExt(PathFile)='.wmf') or (ExtractFileExt(PathFile)='.emf') then
begin
Metafile := TMetaFile.Create;
Bitmap := TBitmap.Create;
MetaFile.Assign(Form1.Image1.Picture.Metafile);
Bitmap.Height := Metafile.Height;
Bitmap.Width := Metafile.Width;
Bitmap.Canvas.Draw( 0 , 0 , MetaFile);
Image1.Picture.Bitmap.Assign(Bitmap);
Bitmap.Free;
MetaFile.Free;
end;
if (ExtractFileExt(PathFile)='.jpg') then
begin
jpeg := TJPEGImage.Create;
jpeg.CompressionQuality := 100 ;
jpeg.Assign(Form1.Image1.Picture.Graphic);
Bitmap := TBitmap.Create;
Bitmap.Assign(jpeg);
Image1.Picture.Bitmap.Assign(Bitmap);
Bitmap.Free;
jpeg.Free;
end;
if (ExtractFileExt(PathFile)='.ico') then
begin
Icon := TIcon.Create;
Bitmap := TBitmap.Create;
Icon.Assign(Form1.Image1.Picture.Icon);
Bitmap.Width := Icon.Width;
Bitmap.Height := Icon.Height;
Bitmap.Canvas.Draw( 0 , 0 , Icon);
Image1.Picture.Bitmap.Assign(Bitmap);
Icon.Free;
Bitmap.Free;
end;
end;



procedure TForm2.TrackBar1Change(Sender: TObject);
var i, j, RedValue2, GreenValue2, BlueValue2: integer;
    OrigRow, DestRow: pRGBArray;

begin
If TrackBar1.Position<>0 then
Begin
  RedValue2:=TrackBar1.Position;
  GreenValue2:=TrackBar1.Position;
  BlueValue2:=TrackBar1.Position;
  for i := 0 to form2.Image1.Picture.Height-1 do
  begin
    Origrow:=form2.Image1.Picture.Bitmap.ScanLine[i];
    DestRow:=form2.Image1.Picture.Bitmap.ScanLine[i];

    for j := 0 to form2.Image1.Picture.Width-1 do
    begin

      if (RedValue2-RedValue1) > 0 then
        DestRow[j].rgbtRed := Min(255, OrigRow[j].rgbtRed + 3)
      else
        DestRow[j].rgbtRed := Max(0, OrigRow[j].rgbtRed - 1);

      if (GreenValue2-GreenValue1) > 0 then
        DestRow[j].rgbtGreen := Min(255, OrigRow[j].rgbtGreen + 3)
      else
        DestRow[j].rgbtGreen := Max(0, OrigRow[j].rgbtGreen - 1);

      if (BlueValue2-BlueValue1) > 0 then
        DestRow[j].rgbtBlue := Min(255, OrigRow[j].rgbtBlue + 3)
      else
        DestRow[j].rgbtBlue := Max(0, OrigRow[j].rgbtBlue - 1);
    end;
  end;
form2.Image1.Refresh;
RedValue1:=RedValue2;
GreenValue1:=GreenValue2;
BlueValue1:=BlueValue2;
End;

end;

end.

Может алгоритм и не самы лучший, но вопрос не в этом... Оно не нормально работает для разных форматов
jpg - отлично
bmp - почему-то не захватывает кусок картинки
ico - никаких изменений не происходит
emf,wmf - грузит 100%ЦП и виснет напрочь

Почему? Ведь я каждый формат привожу к Bitmap и произвожу одни и те же действия... Эта технология при переводе в оттенки серого работает...
yulia вне форума   Ответить с цитированием
Старый 05.12.2008, 02:26   #5
Роман Радер
Участник клуба
 
Аватар для Роман Радер
 
Регистрация: 16.12.2006
Сообщений: 859
Репутация: 254
По умолчанию

Цитата:
Почему?
попробуй вот тут
Bitmap.Canvas.Draw( 0 , 0 , MetaFile);
не MetaFile передавать а как-то привести его к типу TGraphic
Роман Радер вне форума   Ответить с цитированием
Старый 05.12.2008, 20:13   #6
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
Репутация: 124

icq: 312437304
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Я использую вот это:

Код:

procedure ChangeContrast(BitMap: TBitmap; Lighten: Boolean; Percent: Byte;
  BColor: TColor);
var
  i, j: Integer;
  t: pRGBTriple;
  r, g, b: extended;
begin
  BitMap.PixelFormat := pf24bit;
  for i := 0 to BitMap.Height - 1 do
  begin
    t := BitMap.Scanline[i];
    for j := 0 to BitMap.Width - 1 do
    begin
      if TColor(RGB(t^.rgbtRed, t^.rgbtGreen, t^.rgbtBlue)) <> BColor then
      begin
        b := t^.rgbtBlue;
        g := t^.rgbtGreen;
        r := t^.rgbtRed;

        if Lighten then
        begin
          b := b + ((b / 255) * Percent);
          g := g + ((g / 255) * Percent);
          r := r + ((r / 255) * Percent);
        end else
        begin
          b := b - ((b / 255) * Percent);
          g := g - ((g / 255) * Percent);
          r := r - ((r / 255) * Percent);
        end;
        
        if r > 255 then r := 255;
        if r < 0 then r := 0;
        if g > 255 then g := 255;
        if g < 0 then g := 0;
        if b > 255 then b := 255;
        if b < 0 then b := 0;

        t^.rgbtBlue := Round(b);
        t^.rgbtGreen := Round(g);
        t^.rgbtRed := Round(r);
      end;
      inc(t);
    end;
  end;
end;

Вы знаете, Ваш вариант мне больше понравился чем мой.... и оно работает с моим методом преобразования форматов файлов в Bitmap.. только не могли бы Вы мне сказать, какой цвет надо передавать в параметр BColor?
И еще.. это нормально, что когда я уменьшаю яркость оно очень быстро переходит в черное все и больше уже не светлеет?

Последний раз редактировалось yulia; 05.12.2008 в 20:17.
yulia вне форума   Ответить с цитированием
Старый 05.12.2008, 20:41   #7
BOBAH13
Android Developer
Профессионал
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Адрес: Los Angeles, USA
Сообщений: 3,710
Репутация: 1457
По умолчанию

Блин ну вы даете, это когда было функция не моя, я ее нашел в нете. Щас вообще не юзаю такого рода, переключился на GDI+ намного больше возможностей и главное компактность.
__________________
Home | Android for food | XWindows Dock | github
BOBAH13 вне форума   Ответить с цитированием
Старый 05.12.2008, 20:58   #8
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
Репутация: 124

icq: 312437304
По умолчанию

та какая разница когда это было )))) думала, может еще помните )))

Хотя я сама уже во всем разобралась )

Последний раз редактировалось yulia; 05.12.2008 в 22:22.
yulia вне форума   Ответить с цитированием
Старый 06.12.2008, 18:10   #9
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Адрес: LocalHost
Сообщений: 103
Репутация: 39
Радость

Когда-то делал так
Вложения
Тип файла: rar Регулировка яркости Image.rar (20.0 Кб, 150 просмотров)
Nester вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
яркость резкость контрастность Илья PHoeNiX Общие вопросы Delphi 1 08.06.2008 23:04
Image1.Picture.SaveToFile TaTT DoGG Общие вопросы Delphi 3 03.05.2008 10:43
Яркость пиксела -=<[Evklidd]>=- Мультимедиа в Delphi 4 02.02.2008 13:24


01:35.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru