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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2021, 00:16   #21
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Если фон одноцветный, то вместо:
Код:
if bmp1.Canvas.Pixels[x,y]=clBlack then
ставим:
Код:
if bmp1.Canvas.Pixels[x,y]<>BackColor then
Где BackColor цвет фона.

И про рисование на исходном битмапе верное замечание сделали. Вам готовый пример дали, а вы пытаетесь добавить отсебятину...
Фоны разного цвета буквы тоже разного цвета ( в pf1bit переводить не вариант тоже
noveek вне форума Ответить с цитированием
Старый 16.12.2021, 02:56   #22
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
По умолчанию

Пока додумался до такого:
Код:
if (Canvas.Pixels[0,0]))=2563858 then
InvertBitmap(sbscrollingimage1.picture);
//Если цвет фона чёрный то инвертируем изображение
noveek вне форума Ответить с цитированием
Старый 16.12.2021, 06:04   #23
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от noveek Посмотреть сообщение
Фоны разного цвета буквы тоже разного цвета ( в pf1bit переводить не вариант тоже
Так и делают. Алгоритм Отцу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 16.12.2021, 09:02   #24
noveek
Пользователь
 
Регистрация: 26.05.2015
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Так и делают. Алгоритм Отцу.
Всё сделано перевожу в серый, перевожу в чёрно-белый, ужирняю, инвертирую если цвет <clGray не знаю насколько верно и универсально вроде работает
Код:
procedure GrayscaleBitmap(ABitmap: TBitmap);
var
  X: Integer;
  Y: Integer;
  Gray: Byte;
  Pixels: PRGBArray;
begin
  // iterate bitmap from top to bottom to get access to each row's raw data
  for Y := 0 to ABitmap.Height - 1 do
  begin
    // get pointer to the currently iterated row's raw data
    Pixels := ABitmap.ScanLine[Y];
    // iterate the row's pixels from left to right in the whole bitmap width
    for X := 0 to ABitmap.Width - 1 do
    begin
      // calculate luminance for the current pixel by the mentioned formula
      Gray := Round((0.299 * Pixels[X].rgbRed)   +
                    (0.587 * Pixels[X].rgbGreen) +
                    (0.114 * Pixels[X].rgbBlue));
      // and assign the luminance to each color component of the current pixel
      Pixels[X].rgbRed   := Gray;
      Pixels[X].rgbGreen := Gray;
      Pixels[X].rgbBlue  := Gray;
    end;
  end;
end;

procedure BlackWhite(image: tbitmap; gray: boolean);
var i,j,c: integer;
    p: PRGB;
begin
 image.PixelFormat:= pf24bit;
 for i:=0 to image.Height-1 do begin
  p:= image.ScanLine[i];
  for j:= 0 to image.Width-1 do begin
   c:= round(0.3*p[j].rgbtRed+0.59*p[j].rgbtGreen+0.11*p[j].rgbtBlue);
   if not gray then //???????? ??????
    if c >= 128 then c:= 255 else c:= 0;
   p[j].rgbtRed:= c;
   p[j].rgbtGreen:= c;
   p[j].rgbtBlue:= c
  end
 end
end;

procedure jirno(Bmp:Tbitmap;r:integer);
var
x,y: integer;
begin
bmp.Canvas.Pen.Color := clBlack;
bmp.Canvas.Brush.Color := clBlack;
bmp.Canvas.Brush.Style := bsSolid;
for x:=0 to bmp.Width-1 do
for y:=0 to bmp.Height-1 do
if bmp.Canvas.Pixels[x,y]=clblack then
bmp.Canvas.Ellipse(x-r, y-r, x+r, y+r);
end;

procedure InvertBitmap(MyBitmap: TBitmap);
var
  i, j: Integer;
  ByteArray: PByteArray;
begin
  MyBitmap.PixelFormat := pf24Bit;
  for j := 0 to MyBitmap.Height - 1 do
  begin
    ByteArray := MyBitmap.ScanLine[j];
    for i := 0 to MyBitmap.Width * 3 - 1 do
    begin
      ByteArray[i] := 255 - ByteArray[i];
    end;
  end;
end;

...
if (bmp.Canvas.Pixels[0,0])<clgray then
InvertBitmap(sbscrollingimage1.picture);

Последний раз редактировалось noveek; 16.12.2021 в 09:20.
noveek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Perl задачи. Перевод буквы в верхний регистр. Как сделать так, чтобы переводил буквы в верхний регистр после точки, восклицательного знака,вопросительного знака? Maxis10 Помощь студентам 0 09.11.2017 01:31
как сделать чтобы из столбца А буквы раскладывались по ячейкам adamant63 Microsoft Office Excel 20 10.04.2016 01:01
Как сделать чтобы при регистрации пароль содержал бы буквы и цифры? erwap PHP 8 08.12.2011 15:54
Как сделать так, чтобы в корректно отображались русские буквы(С) Александр Елис Помощь студентам 0 06.11.2009 19:39
Помогите в строке EXCELя найти цифры и сделать их жирными Wasili4 Microsoft Office Excel 5 17.05.2009 16:21