29. juli 2001 - 20:05Der er
18 kommentarer og 1 løsning
HJÆÆLP -=HASTER=-
er det ikk muligt at flytte på componenter i en form så man eks. kan lave en rulletekst???
når jeg prøver med TTimer og left := left+1 så hakker den enormt meget hvordan undgår jeg det????
og så har jeg også et andet problem jeg er ved at lave et billedredigeringsprogram og her har jeg tænkt mig at lave noget hvor det toner et andet billede frem det har jeg lavet. Jeghar lavet det med en X og Y for løkke men når den så skal til at lege med de store billeder tager det enormt langt tid hvorimod hvis jeg tager nogle af de der multimedia komponenter så kan det sagtens lade sig gøre at rendere nogle stykker i sekundet hvordan kan jeg gøre min for løkke hurtigere?????
cautoo >> det er ScrollText.zip du skal bruge. Du skal bare lave baggrunden transperent. Det er ikke så svært. Problemet med din kode er du au ændere een pixel af gangen og så tegner skærmen op. Det må nødvendig vis gå galt !
procedure TForm1.Button2Click(Sender: TObject); var r,g,b: Integer; r1,g1,b1: Integer; X, Y: Integer; tal: Integer; begin tal := TrackBar1.Position; Image3.Height := Image1.Height; Image3.Width := Image1.Width; for Y := 0 to Image1.Height do begin for X := 0 to Image1.Width do begin r:=GetRValue(Image1.Canvas.Pixels[x,y]); g:=GetGValue(Image1.Canvas.Pixels[x,y]); b:=GetBValue(Image1.Canvas.Pixels[x,y]); r1:=GetRValue(Image2.Canvas.Pixels[x,y]); g1:=GetGValue(Image2.Canvas.Pixels[x,y]); b1:=GetBValue(Image2.Canvas.Pixels[x,y]); r := Round((r/100*tal) + (r1/100*(100-tal))); g := Round((g/100*tal) + (g1/100*(100-tal))); b := Round((b/100*tal) + (b1/100*(100-tal))); Image3.Canvas.Pixels[x,y] := RGB(r,g,b); end; end; Label5.Caption := IntToStr(100-TrackBar1.Position); Label6.Caption := IntToStr(TrackBar1.Position); end;
cautoo >> Nu fortæller du ikke hvor mange farver der er i din bitmap der gik jeg ud fra der var 24Bit. Jeg loader mine bitmaps fra filer, me de kunne ligeså godt kommer fra en image kontrol. (vist i den ud kommenteret tekst.
Jeg har med vilje ikke skrevet kommentarer til koden, fordi jeg syned du skal gøre det, fordi deraf får du forståelsen af hvad der sker. Det må være din opgave at re publicere koden med kommentarer, samt forklare den måbende hob hvordan det her skidt virker.
const PixelCountMax = 32768;
type pRGBArray = ^TRGBArray; TRGBArray = array[0..PixelCountMax-1] of TRGBTriple; EImageProcessingError = class (Exception);
if (OriginalBitmap1.PixelFormat = pf24bit) and (OriginalBitmap2.PixelFormat= pf24bit) then begin DetsBitmap := TBitmap.Create; DetsBitmap.PixelFormat := pf24Bit;
tal := TrackBar1.Position; DetsBitmap.Height := OriginalBitmap1.Height; DetsBitmap.Width := OriginalBitmap1.Width;
for Y := 0 to OriginalBitmap1.Height-1 do begin RowOriginal1 := pRGBArray(OriginalBitmap1.Scanline[y]); RowOriginal2 := pRGBArray(OriginalBitmap2.Scanline[y]); RowProcessed := pRGBArray(DetsBitmap.Scanline[y]);
for X := 0 to OriginalBitmap1.Width-1 do begin r:= RowOriginal1[x].rgbtRed; g:= RowOriginal1[x].rgbtGreen; b:= RowOriginal1[x].rgbtBlue;
hvis dit billede kun har 8bit farver (256) eller 1bit (8) Så har jeg også en løsning på det, men først efter du har redegjort for hvordan der her virker ..
if (OriginalBitmap1.PixelFormat = pf24bit) and (OriginalBitmap2.PixelFormat= pf24bit) then begin DetsBitmap.PixelFormat := pf24Bit;
tal := TrackBar1.Position;
for Y := 0 to OriginalBitmap1.Height-1 do begin RowOriginal1 := pRGBArray(OriginalBitmap1.Scanline[y]); RowOriginal2 := pRGBArray(OriginalBitmap2.Scanline[y]); RowProcessed := pRGBArray(DetsBitmap.Scanline[y]);
for X := 0 to OriginalBitmap1.Width-1 do begin r:= RowOriginal1[x].rgbtRed; g:= RowOriginal1[x].rgbtGreen; b:= RowOriginal1[x].rgbtBlue;
det eneste jeg ikk helt fatter er hva denne kommando gør: RowOriginal1 := pRGBArray(OriginalBitmap1.Scanline[y]); RowOriginal2 := pRGBArray(OriginalBitmap2.Scanline[y]); RowProcessed := pRGBArray(DetsBitmap.Scanline[y]);
Altså en scanlinje er af typen TRGBArray i et 24Bits bitmap. Hvis hu kalder OriginalBitmap1.Scanline[y] får du en pointer til ScanLine nummer \'y\'. da vi nu ved det er en 24Bits bitmap så ved vi at det er en pointer til et array af TRGBTriple. Desværre har borland ikke defineret sådan en type så derfor gør jeg det :
const PixelCountMax = 32768; type pRGBArray = ^TRGBArray; TRGBArray = array[0..PixelCountMax-1] of TRGBTriple;
DDet smaret er nu at jeg bare kan indexsere ud i remmen fordi jeg kender højde og brede på min bitmap.
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.