Toster Napisano Październik 19, 2006 Zgłoś Share Napisano Październik 19, 2006 Ok od pewnego czasu pracuje nad recznym reskalowaniem Quada tak aby pasowal mi do moich wymagan, pomyslalem ze moze sie komus przyda wiec wrzucam kodzik. Dostepne sa 3 metody skalowania: Pionowe X, poziome Y, Const aspect ratio. Kod jest czesciowo zoptymalizowany, da sie go bardziej wyzylowac (co juz zrobilem) ale kod wynikowy jest w javie a to nie takie miejsce. Anyway, dla zainteresowanych potrzeba:1. Paintbox2. Image do ktorego wczytamy bitmape3. 5 suwakow4. jeden guzik5. kod ponizej [code=Delphi] unit Unit1; interface uses Windows, Messages, Sys][X[XBX[w2WD7G&27FD7G&2FGPDf&Ó6Ć72Df&4(Mąą QMąą 4(Mąą QMąą 4 ScrollBar3: TScrollBar; Image1: TImage; PaintBNZ[B]N]BĆC&Ć&#SE67&Ć&#&Fw&WE&F4( ŃŃ ąŹĄMQ=4(edure ScrollBar4Change(Sender: TObject); private proYH]]XY KLKLLM[YNB&6VGW&RG&uVB67B2\"2CFVvW\"(IEĄąąąŃ4(Aate declarations } public { Public declarations } YH]]XY KLKLLM[YNBVćCf f&ÓDf&ÓŚĆVVFFE\"ćF4(4)Q ŃŃ ąŹĄMQ=4)4( QuadWidth, LeftY, RightY, LeftH, RightH : integer; begin Z[K[HXBZ[Kf2fĆ&V7BD&6ĆVE&V7BVEvGFŁ67&ĆAŃ4(1ŃdMąą AŃ4(IĄŃd ScrollBar5.Position; LeftH := ScrollBar2.Position; YH][BHY[ŃK][R[^`dG&uVBVEvGFĆVgE&vE1ŃdŹ1Ń IĄŃdIĄŃ 4(!E QuadWidth, LeftY, LeftY + LeftH, RightY, RightY+RightH); ]XY LLL ÓYL Y NB[BB[C&6VGW&RDf&ÓG&uVB67B\"\"2CŃ4)4(ąŃ4( dy34: integer; slope12, slope34: integer; minY, maxN[YBK[YBNX[B^L#&VŚ&VvW7FvVćRć& 4(źąŃi]Mi4( dx12 := x2 - x1; dy12 := y2 - y1; dy13 := y3 - y1; LHMHLBX[YHBYLL wCFV&Vv6ĆS\"ŁG\"6FbG#ąą4(4(ąŃĄ4 slope34 := (dx12 shl 8) div dy34; end else slope34H BBZ[HHZ[LKLNBZ[HHZ[Z[KLĘNŁBŁ \"d5Ą5d4(d5Ą5d4(4( minY+1 to maxY-1 do begin xs := x1; xe := x2;BY H LH[ ILJH[Y[Bś2\02ŁRŁ6ĆS\"Ą4(4(ĄąĄŃen begin //skos / xs := x1 + ((Slope12*(K^LJJH NBHHB[BBY fCBćBfwC2FV&Vv6ś25ĄŹĄMąĄĄ4( := Min(xe, x2); end; if (y < y3) and (y>M H[Y[BBHX^ JRŁR6ĆS3B26\"4(4(Ńźź4( min(y1,y2)+(x-x1) * (dy12/dx12); yy2 := min(y3,y4JĘ^JH LLNBY^LH^LH[^LH^\"'Ł#G#'ŁĄźĄee4(%AŃ.Bitmap.Canvas.Pixels[Round(rx),Round(ry)]; cl := ]NBZ[K[^[WHHBVćCVćCG'6vćRĆćD&6fA ąąeąą4(AŃ 5QźĄą PaintBox1.Canvas.LineTo(x2,y2); PaintBox1.Canvas.LinUĘM NBZ[K[[UĘKLĘNBZ[6f2ĆćUFŚVćC&6VGW&RDf&ÓdG&uVB6Ń4)4(x: integer; dy13, dy24, dy34: integer; slope12, slopL[YBZ[KX^N[YBK[Y#''FVvW##FVvW#Ś&VvW74(źź4(źź4(źąŃowe x1 = x3, x2 = x4 ZAWSZE ! dx12 := x2 - x1; dy12 HLHLNBLLHLHLNBLHMHLB&Ć7ŚćR6ĆpbG\"fCfwCFV&Vv6ĆĄĄ4(ąą4(4( if dx12 <> 0 then begin slope34 := (dy34 shl H]LB[[HLHBBZ[HHZ[L\& quot;Ł2ŁB(4(d5Ą4(d 5Ą5d4(Y := Max(MaxY, y4); } for x := x2 - x1 downto 0 do begiBYLL[BZ[HHLHJ T\"6\"V6PŁ6ĆS\"Ą4(4(MąąŃĄ4(d - (((-Slope34)*x) shr 8) else maxY := y3 + L H NBBYX^H Z[H[Y[BŁŁŁ4(4(Ą4(2 := (140 shl 8) div (maxY-minY); for y := maxY-minY Y[BH ^LJHB'Ł\"6\"6ŁvS7GW&R&F Aąmąt4(AŃ Aąm minY+y] := cl; end; end; //odrysowanie liniaZCBZ[K[[HY[BZ[K6f2fUFD&6f2ĆćUF\"\"AŃ 1QźĄą4(AŃ 1Qźx1,y3); PaintBox1.Canvas.LineTo(x1,y1); end; proceduHLK[J[X NBY[B]6Ć6ćŚVćC&6VGW&RDf&ÓG&uVB67BŃ4)4(ąŃ4(ą13, slope24: integer; minX, maxX: integer; rx,ry: inYBK[YBLLL[YB6FVvW#Ś&VvW7FvVćRć& źź4(źąŃi]Mi dy13 := y3 - y1; dx13 := x3 - x1; dx24 := x4 - BYLLH[LLH NBX[YHB6ĆS2ŁG26FbG36ĆS#BŁG#B64 (4(Ńźź4(if Slope13<0 then minX := x1 -(((-Slope13)*y) s CB[CBZ[HH LLĘJH Nb6ĆS#BfCFVŁ\"ąĄ4(ą4(`ŹĄMą4*y) shr 8); if maxX < minX then begin HX^BX^HZ[BZ[HBVćCŁC6FbG 3\"ŁĄĄ``4(``Ńźdo begin rx := (x * xx2) shr 8; ry := (y JHBH[XYLKXK]X[V5''ÓD& amp;6f2V5ś4(4(4(źą4(AintBox 1.Canvas.Pen.Color := clYellow; PaintBox1.Canvas.MUĘKLJNBZ[K[[UĘLJNBZ[6f2ĆćUFB2D&6f2ĆćUF22(AŃ 1QźĄą4)4(4)Q.RQuad(const x1, y1, x4, y4: integer); var dx, dy: inteBN[YBYYK^^N[YBFVvW#Ś& amp;VvGŁBGŁBGĄ4(Ą 4(:= 0; for y := dy downto 0 do begin ix := 0; HY[BH[XYLKX&R&F6f2V5ś6\"Ć6\"ÓD& Aąmt4(Ź end; iy := iy + idy; end; end; end. [/code] Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.