Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.01.2022, 03:17
Katerina1993 Katerina1993 вне форума
Прохожий
 
Регистрация: 22.09.2018
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как на delphi заменить цвета пикселей картинки?

Здравствуйте, предположим у меня есть два компонента Image1 и Image2. В первом загружается картинка во втором она перерисовывается но заменяются цвета пикселей. Как это реализовать на Delphi 7(сейчас только эта версия у меня установлена). Какой результат я пытаюсь сделать на delphi 7 я сделала на html 5 Вот:
https://codepen.io/Smith37/pen/KKXGmgw

Так же еще код html5.
Код HTML:
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>Замена цвета картинки</title> <script> var canvas, ctx, img; window.onload = function() { const img = new Image() img.src = 'main.jpg'; img.crossOrigin = "Anonymous"; img.onload = function() { canvas = document.getElementById("drawingCanvas"); ctx = canvas.getContext("2d"); const w = img.naturalWidth const h = img.naturalHeight const x1 = 0; const y1 = 0; const x2 = 100; const y2 = 0; canvas.width = 200; canvas.height = 100; ctx.clearRect(0, 0, w, h) ctx.drawImage(img, x2, y2, w, h) ctx.drawImage(img, x1, y1, w, h) const imageData = ctx.getImageData(x2, y2, w, h) const view = new DataView(imageData.data.buffer); for (let i = 0; i < h; i++) { let str = "" for (let j = 0; j < w; j++) { const k = i * 4 * w + 4 * j if (view.getUint32(k) > 0x777777ff) { view.setUint32(k, 0x00ff00ff) str += "_" } else { view.setUint32(k, 0xff0000ff); str += "e" } } } view.setUint32(66, 0xFF000000, true); ctx.putImageData(imageData, x2, y2); } } </script> </head> <body> <canvas id="drawingCanvas" style="background:#444444" width="400px" height="300px"></canvas><br> </body> </html>

И скриншот замены пикселей.
Ответить с цитированием
  #2  
Старый 12.01.2022, 11:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,723
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Если картинка небольшая, то надо получить Bitmap из Image1, в этом битмапе есть св-во Canvas.Pixels, которое можно менать, указывая соотв. цвет.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  W: Word;
begin
    for W := 10 to 200 do
      Canvas.Pixels[W, 10] := clRed;
end;
Если картика большая, то надо делать через ScanLine, так быстрее получается. Но там сложнее, но примеров в интернете есть.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram