Problem z przerzuceniem obrazu za pomocą pobrania koloru

0

Otóż mam taki kodzik:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Edit1: TEdit;
    pic: TOpenPictureDialog;
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var x,y: Integer;
R,G,B : integer;
a : string;

begin
if (X >image1.Width) then
x := 1 ;
if (y >image1.height) then
y := 1 ;
R :=0;
B := 0;
G:= 0;
R := RGB(canvas.Pixels[x,y], 0,0);
G := RGB(0, canvas.Pixels[x,y],0);
B := RGB(0,0, canvas.Pixels[x,y]);

while (x<image1.Width) and (y<=image1.Height) do
begin

R := RGB(canvas.Pixels[x,y],0,0);
G := RGB(R, canvas.Pixels[x,y],0);
B := RGB(R,G, canvas.Pixels[x,y]);

Canvas.Pixels[X+ 600, y] := RGB(R,g,B);
R :=0;
B := 0;
G:= 0;
x:=x+1;

if (x = image1.Width -2) then
begin
y:= y+1;
x:= 1;
end;


end;
end;



end.

Tylko że mi się robi czarno-białe

0

Tobie się nie chce krótko opisać co ten program robi a ja mam go analizować i odczytać twoje intencję - dziękuje pas.

0

To tak, ten progamik odczytuje kolor RGB z pierwszego obrazka i przesyła go dalej na ten obok też za pomocą RGB, tylko tu jest problem, zobacz co zrobiłem po rozczepieniu kolorów
user image

Canvas.Pixels[X+ 400, y] := RGB(R,0,0);
Canvas.Pixels[X+ 800, y] := RGB(0,G,0);
Canvas.Pixels[X+ 800, y+ 300] := RGB(0,0,B);
Canvas.Pixels[X, y+ 330] := RGB(R,G,B);
0

Co to robi ? Zmienne x i y to sa zmienne lokalne tej procedury i wydaje mi się ze warunki są zbędne

if (X >image1.Width) then
x := 1 ;
if (y >image1.height) then
y := 1 ;

Tu jest błąd - RGB robi ze składowych kolor a nie wyciąga składową R G B

R := RGB(canvas.Pixels[x,y], 0,0);
G := RGB(0, canvas.Pixels[x,y],0);
B := RGB(0,0, canvas.Pixels[x,y]);

Wyciaganie składowych możesz wykonac przez operacje bitowe

function Col2RGB(color : TColor) : TRGB;
begin
  Result.R := color AND $000000FF;
  Result.G := (color AND $0000FF00) SHR 8;
  Result.B := (color AND $00FF0000) SHR 16;
  Result.A := (color AND $FF000000) SHR 24;
end;
0

Kiedyś mi się udało za pomocą RGB zrobić tak jak pisałem tylko że używałem do tego wyodrębnianie 1 2 i 3 części tekstu

0

Daj screena jak zmienisz kod :)

0

Błąd mam z tym

function Col2RGB(color : TColor) : TRGB;
begin
  Result.R := color AND $000000FF;
  Result.G := (color AND $0000FF00) SHR 8;
  Result.B := (color AND $00FF0000) SHR 16;
  Result.A := (color AND $FF000000) SHR 24;
end;

TRGB mi zaznacza jako nieznana rzecz

0

Sorry to była przykładowa funkcja do modyfikacji

  color = Canvas.Pixels(x,y);
  R := color AND $000000FF;
  G := (color AND $0000FF00) SHR 8;
  B := (color AND $00FF0000) SHR 16;

tylko zadeklaruj zmienna color

0

Ok działa :]

procedure TForm1.Button1Click(Sender: TObject);
var x,y: Integer;
R,G,B : integer;
color : Tcolor;


begin
if (X >image1.Width) then
x := 1 ;
if (y >image1.height) then
y := 1 ;

while (x<image1.Width) and (y<=image1.Height) do
begin

  color := Canvas.Pixels[x,y];
  R := color AND $000000FF;
  G := (color AND $0000FF00) SHR 8;
  B := (color AND $00FF0000) SHR 16;


Canvas.Pixels[X+ 400, y] := RGB(R,0,0);
Canvas.Pixels[X+ 800, y] := RGB(0,G,0);
Canvas.Pixels[X+ 800, y+ 300] := RGB(0,0,B);
Canvas.Pixels[X, y+ 330] := rgb(r,g,b);


x:=x+1;

if (x = image1.Width -2) then
begin
y:= y+1;
x:= 1;
end;


end;
end;

Ale to co mi kazałeś usunąć to gdy to skasowałem to nic się nie działo.
Teraz jak tu zrobić negatyw ;p

0

hmmm, nie wiem
dodaj coś takiego zaraz po wyznaczeniu składowych

R : = 255 - R;
G : = 255 - G;
B : = 255 -B;

To będzie nasza transformacja

0

Działa elegancko :] Dzięki Ziomek :p

1 użytkowników online, w tym zalogowanych: 0, gości: 1