30. januar 2001 - 15:14Der 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????????
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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...)
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;
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;
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....
borrisholt>> Jeg vil se om jeg kan få din kode til at virke
Synes godt om
Ny brugerNybegynder
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.