Avatar billede cautoo Nybegynder
30. januar 2001 - 15:14 Der er 15 kommentarer og
1 løsning

Tre I En

Denne gang har jeg tre spørgsmål og håber at jeg ikke bliver gjort til grin igen:

1. Er der en der ved hvordan man rotere og spejvender billeder?

2. Er der en der ved om det kan lade sig gøre at finde en mellemfarve i et markeret område eller ved hjælp af at indsætte en figur?

3. Dette har jeg haft før men er ikke tilfreds med svaret. Hvis jeg nu har lavet et program som er usynligt er det så muligt at gøre dette eksempel med programmet: musemarkørs postion: X=100, Y=150 og højreklik????????
Avatar billede borrisholt Novice
30. januar 2001 - 15:17 #1
1) Ja jeg gør

2) det ved jeg også

3 ) ja det er muligt.

Jens B
Avatar billede delphi Nybegynder
30. januar 2001 - 15:18 #2
Jens du er grum....
Avatar billede cautoo Nybegynder
30. januar 2001 - 15:18 #3
Må jeg også få det af vide????
Avatar billede pstric Nybegynder
30. januar 2001 - 15:19 #4
borrisholt>> Du får altså ikke point af mig!
Avatar billede pellelil Nybegynder
30. januar 2001 - 15:19 #5
1) Via Pixel kan du få fat i de enkelte Pixels (hvorved du kan spelvende/rotere efter ønske), men brug i stedet scanline da denne er væsentlig hurtigere.

2) Hvad er en \"mellemfarve\"?. Du kan (igen ved at kigge på pixel/scanline) finde farven på nogle pixels og sætte denne til \"et gennemsnit\" (hvis det er dette du kalder en \"mellemfarve\").

3) Hvis du selv har lavet begge programmre så send i stedet en meddelelse.
Avatar billede delphi Nybegynder
30. januar 2001 - 15:20 #6
På den anden side, med de svar, så har Jens vel egentligt gjort sig berettiget til at få de 10 point (i øvrigt ikke mange, hvis der skal afleveres (ordentlige) svar på alle tre spørgsmål...)
Avatar billede pstric Nybegynder
30. januar 2001 - 15:21 #7
En gang om dagen må være nok ;-)
Avatar billede cautoo Nybegynder
30. januar 2001 - 15:22 #8
Tak. Men er der ikke en som vil give mig lidt koder som skal bruges ?? (Selvom jeg ikke kan give så mange point)
Avatar billede cautoo Nybegynder
30. januar 2001 - 15:23 #9
jeg ville gerne dele dem op i tre emner men så ville det være med 4 point til hjert emne :-(
Avatar billede cautoo Nybegynder
30. januar 2001 - 15:24 #10
hjert = hvert
Avatar billede pstric Nybegynder
30. januar 2001 - 15:24 #11
Hey, jeg har lige modtaget en mail om at cautoo har kommenteret. Er mailsystemet mon på vej op igen eller var jeg bare heldig?
Avatar billede pstric Nybegynder
30. januar 2001 - 15:25 #12
Nej, der kom en til!
Avatar billede cautoo Nybegynder
30. januar 2001 - 15:26 #13
Hvis det er dit eget mailsystem ved jeg det ikke og ellers så har jeg også modtaget at der er skrevet noget nogle gange!!!!!!!!!!!!!
Avatar billede borrisholt Novice
30. januar 2001 - 15:27 #14
kig lidt på det her :

unit GraphFlip;

interface

uses Windows, Classes, Sysutils, Graphics;

function RotateBitmap270 (const bitmap : TBitmap) : TBitmap;
function RotateBitmap90 (const bitmap : TBitmap) : TBitmap;
function ConvertToGrayscale (const bitmap : TBitmap) : TBitmap;
function ConvertToNegative (const bitmap : TBitmap) : TBitmap;

implementation

function BytesPerScanline(PixelsPerScanline, BitsPerPixel, Alignment: Longint): Longint;
begin
  Dec(Alignment);
  Result := ((PixelsPerScanline * BitsPerPixel) + Alignment) and not Alignment;
  Result := Result div 8;
end;


function RotateBitmap270 (const bitmap : TBitmap) : TBitmap;
var
  x, y : Integer;
  ps, ps1, pr, pr1 : PRGBTriple;
  bpss, bpsr : Integer;

begin
  if bitmap.PixelFormat <> pf24Bit then
    raise Exception.Create (\'Invalid pixel format\');
  result := TBitmap.Create;
  result.PixelFormat := bitmap.PixelFormat;
  result.Height := bitmap.Width;
  result.Width := bitmap.Height;

  ps1 := bitmap.ScanLine [0];
  pr1 := result.ScanLine [bitmap.Width - 1];

  bpss := BytesPerScanLine (bitmap.Width, 24, 32);
  bpsr := BytesPerScanLine (result.Width, 24, 32);

  for y := 0 to bitmap.Height - 1 do
  begin
    ps := PRGBTriple (PChar (ps1) - bpss * y);

    for x := 0 to bitmap.Width - 1 do
    begin
      pr := PRGBTriple (PChar (pr1) + bpsr * x);
      Inc (pr, y);
      pr^ := ps^;
      Inc (ps)
    end
  end;
  GDIFlush
end;

function RotateBitmap90 (const bitmap : TBitmap) : TBitmap;
var
  x, y : Integer;
  ps, ps1, pr, pr1 : PRGBTriple;
  bpss, bpsr : Integer;

begin
  if bitmap.PixelFormat <> pf24Bit then
    raise Exception.Create (\'Invalid pixel format\');
  result := TBitmap.Create;
  result.PixelFormat := bitmap.PixelFormat;
  result.Height := bitmap.Width;
  result.Width := bitmap.Height;

  ps1 := bitmap.ScanLine [bitmap.Height - 1];
  pr1 := result.ScanLine [0];

  bpss := BytesPerScanLine (bitmap.Width, 24, 32);
  bpsr := BytesPerScanLine (result.Width, 24, 32);

  for y := 0 to bitmap.Height - 1 do
  begin
    ps := PRGBTriple (PChar (ps1) + bpss * y);

    for x := 0 to Bitmap.Width - 1 do
    begin
      pr := PRGBTriple (PChar (pr1) - bpsr * x);
      Inc (pr, y);
      pr^ := ps^;
      Inc (ps)
    end
  end;
  GDIFlush
end;


function ConvertToGrayscale (const bitmap : TBitmap) : TBitmap;
var
  x, y : Integer;
  ps, ps1, pr, pr1 : PRGBTriple;
  bps : Integer;
  n : Integer;

begin
  if bitmap.PixelFormat <> pf24Bit then
    raise Exception.Create (\'Invalid pixel format\');
  result := TBitmap.Create;
  result.PixelFormat := bitmap.PixelFormat;
  result.Height := bitmap.Height;
  result.Width := bitmap.Width;

  ps1 := bitmap.ScanLine [0];
  pr1 := result.ScanLine [0];

  bps := BytesPerScanLine (bitmap.Width, 24, 32);

  for y := 0 to bitmap.Height - 1 do
  begin
    ps := PRGBTriple (PChar (ps1) - bps * y);
    pr := PRGBTriple (PChar (pr1) - bps * y);

    for x := 0 to Bitmap.Width - 1 do
    begin
      n := (ps^.rgbtBlue + ps^.rgbtGreen + ps^.rgbtRed) div 3;
      pr^.rgbtBlue := n;
      pr^.rgbtGreen := n;
      pr^.rgbtRed := n;

      Inc (pr);
      Inc (ps)
    end
  end;
  GDIFlush
end;

function ConvertToNegative (const bitmap : TBitmap) : TBitmap;
var
  x, y : Integer;
  ps, ps1, pr, pr1 : PRGBTriple;
  bps : Integer;
begin
  if bitmap.PixelFormat <> pf24Bit then
    raise Exception.Create (\'Invalid pixel format\');
  result := TBitmap.Create;
  result.PixelFormat := bitmap.PixelFormat;
  result.Height := bitmap.Height;
  result.Width := bitmap.Width;

  ps1 := bitmap.ScanLine [0];
  pr1 := result.ScanLine [0];

  bps := BytesPerScanLine (bitmap.Width, 24, 32);

  for y := 0 to bitmap.Height - 1 do
  begin
    ps := PRGBTriple (PChar (ps1) - bps * y);
    pr := PRGBTriple (PChar (pr1) - bps * y);

    for x := 0 to Bitmap.Width - 1 do
    begin
      pr^.rgbtBlue := 255 - ps^.rgbtBlue;
      pr^.rgbtGreen := 255 - ps^.rgbtGreen;
      pr^.rgbtRed := 255 - ps^.rgbtRed;

      Inc (pr);
      Inc (ps)
    end
  end;
  GDIFlush
end;

end.


Så har du lidt at lege med til at rotere og gøre ved med .... til etteren

2 har Pelle svaret på .. Ellers kig på GetPixel()

3 kan du klare med at poste en message til den kontrol der skal \"klikkes på\"

Jens B
Avatar billede delphi Nybegynder
30. januar 2001 - 15:27 #15
Jeg har iøvrigt et program kørende, hvor jeg tager frames fra et kamera, som jeg så laver om til et bitmap.  Som pellelil ganske rigtigt, kan man herefter benytte Scanline til at udlæse et array of pixels, som man så kan behandle.  I mit tilfælde konvertere jeg bl.a. til gråtoner (ved at strippe U signalet) og laver derefter højkontrast billeder ved at sammenligne gråtonen med en brugerdefineret tærskelværdi og dermed afgøre om det pågældende punkt skal være sort eller hvidt.  Der er mere end 300.000 pixels pr. frame, hver af 24 bit, og der er 30 frames pr. sekund. Dvs. at jeg laver mit lille stunt over 27 milioner gange pr. sekund - selv med en 850 MHz CPU er der småtravlt....
Avatar billede cautoo Nybegynder
30. januar 2001 - 15:35 #16
Tak for hjælpen

borrisholt>> Jeg vil se om jeg kan få din kode til at virke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester