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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2015, 15:07   #1
Elena13
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 27
По умолчанию Работа с Image

У меня в image загружается картинка. Мне нужно провести проверку каждого пикселя и если пиксель не белый, то форма заливается выбранным в tcolorbox цветом. Не знаю как написать код. Помогите
Elena13 вне форума Ответить с цитированием
Старый 10.01.2015, 15:18   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,815
По умолчанию

Код:
procedure TForm1.N2Click(Sender: TObject);
var i,j,r,g,b:Integer;
    MyBmp1:TBitMap;
    MyJpg:TJPEGImage;
begin
   Image1.Picture.LoadFromFile('Рисунок.jpg');
   MyBmp:=TBitMap.Create;
   MyBmp.Width:=Image1.Picture.Width;
   MyBmp.Height:=Image1.Picture.Height;
   MyJpg:=TJPEGImage.Create;
   MyJpg.LoadFromFile('Рисунок.jpg');
   MyBmp1.Assign(MyJpg);
   for i:=0 to MyBmp.Width-1 do for j:=0 to MyBmp.Height-1 do
   begin
         Application.ProcessMessages;
         r:=GetRValue(MyBmp.Canvas.Pixels[i,j]);
         g:=GetGValue(MyBmp.Canvas.Pixels[i,j]);         
         b:=GetBValue(MyBmp.Canvas.Pixels[i,j]);       
         if(r=255)and(g=255)and(b=255)then
         begin
           //вот тут пиксель этот белый заливаем нужным цветом
          MyBmp.Canvas.Pixels[i,j]:=//тут уж как-то сам свяжи с tcolorbox'ом
         end;
     end;
   MyJpg.Assign(MyBmp);
   MyJpg.SaveToFile('Рисунок.jpg');
   MyJpg.Free;
   MyBmp.Free;
end;
ну как-то так...
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 10.01.2015, 15:51   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно проще:
Код:
   for i:=0 to MyBmp.Width-1 do for j:=0 to MyBmp.Height-1 do
   begin
         if(MyBmp.Canvas.Pixels[i,j]<>clWhite)then
         begin
           MyBmp.Canvas.Pixels[i,j]:=НужныйЦвет
         end;
     end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.01.2015, 16:25   #4
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Можно быстрее
Код:
 
uses
  PngImage;
...
var
  aRGBLine: pRGBLine;
begin
  ...
  for i := 0 to MyBmp.Width - 1 do 
    begin
      aRGBLine := MyBmp.Scanline[i];
      for j := 0 to MyBmp.Height -1 do 
        begin
          r := aRGBLine[j].rgbtRed;
          g := aRGBLine[j].rgbtGreen;         
          b := aRGBLine[j].rgbtBlue;       
          if(r=255)and(g=255)and(b=255)then
            begin
              ...
            end;
        end;
    end;
end;

Последний раз редактировалось WinCoder; 10.01.2015 в 16:34.
WinCoder вне форума Ответить с цитированием
Старый 10.01.2015, 16:55   #5
Elena13
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 27
По умолчанию

Блин, ребят, не работает(((
Elena13 вне форума Ответить с цитированием
Старый 10.01.2015, 17:02   #6
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Блин, ребят, не работает
Это к Ванге.
WinCoder вне форума Ответить с цитированием
Старый 10.01.2015, 17:03   #7
Elena13
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Это к Ванге.
Никаких ошибок не выводит. Просто не меняет цвет и все
Elena13 вне форума Ответить с цитированием
Старый 10.01.2015, 17:11   #8
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,815
По умолчанию

у нас в каждом коде есть пустое место, где вам, Елена, нужно вставить ваш цвет. или любой другой. для начала, чтоб лучше было видно, протестируйте программку на небольшом белом рисунке размером 100x100, а цвет заменяемый поставьте clRed - красный. к тому же, если у вас рисунок формата jpg, то он способен из белого сделать серый или близкий к такому (255, 249, 251) - тогда видимого результата уже не будет. вы возьмите рисунок формата BMP - в обычном PAINT'е нарисуйте узор и оставьте белое место. и вот этот вот рисунок и загрузите в Image
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 10.01.2015, 17:13   #9
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Сообщение от Elena13 Посмотреть сообщение
Просто не меняет цвет и все
Код показывайте.
WinCoder вне форума Ответить с цитированием
Старый 10.01.2015, 17:45   #10
Elena13
Пользователь
 
Регистрация: 07.01.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Код показывайте.
Код:
 procedure TForm1.FormCreate(Sender: TObject);
var
rgn : HRGN;
begin
//овальная кнопка
rgn:=CreateEllipticRgn(0, 0, Btn1.Width, Btn1.Height);
SetWindowRgn(Btn1.Handle, rgn, true);
//создание формы
image1.align:=alClient;
TransparentColor:=True;
TransparentColorValue:=clWhite;
Color:=clWhite;
BorderStyle:=bsNone;
end;

procedure TForm3.ColorListBox1Click(Sender: TObject);
var
    i, j: Integer;
    MyBmp: TBitMap;
begin
Form1.btn1.Visible:=False;
Form1.Image1.Picture.Bitmap.LoadFromFile ('D:\2\Image1.bmp');
MyBmp:=TBitMap.Create;
MyBmp.Width:=Form1.Image1.Picture.Width;
MyBmp.Height:=Form1.Image1.Picture.Height;
for i:=0 to MyBmp.Width-1 do for j:=0 to MyBmp.Height-1 do
begin
if(MyBmp.Canvas.Pixels[i,j]<>clWhite)then
begin
MyBmp.Canvas.Pixels[i,j]:=ColorListBox1.Selected;
end;
end;
end;

Последний раз редактировалось Elena13; 10.01.2015 в 17:55.
Elena13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с image glebast Помощь студентам 1 10.06.2012 09:56
Работа с image glebast Помощь студентам 2 07.06.2012 15:41
Работа с Image Claster Помощь студентам 2 01.07.2011 21:02
работа с image messi013 Общие вопросы Delphi 4 14.01.2010 16:14
работа с image Lokos Компоненты Delphi 6 28.12.2009 18:05