Zmniejszanie bitmapy

0

Jak zmniejszyć naturalne rozmiary bitmapy?
Powiedzmy, że mam obrazek o rozmiarach: 1700x1200.

Robię coś takiego:

var
 b: TBitmap;
begin
 b := TBitmap.Create;
 b.LoadFromFile('plik.bmp');
 b.width:=700;
 b.height:=200;
 b.SaveToFile('plik.bmp');
 b.Free;
end;

To mi zapisuje tylko ten wycinek bitmapy. Jak zmniejszyć jej rozmiary?

0

Do proporcjalnego zminiejszania bitmapy służy funkcja StretchDraw albo jkoś tak...

0

Do proporcjalnego zminiejszania bitmapy służy funkcja StretchDraw albo jkoś tak...

var
 r: TRect;
begin
 r.Left:=0;
 r.Top:=0;
 r.Right:=700;
 r.Bottom:=200;
 b.Canvas.StretchDraw(r, b);
 b.SaveToFile(openDialog1.FileName);
 b.Free;
end;

Zmniejszyło się, ale:

  1. Nieproporcjonalnie(oryginalne wymiary to 1700x1200)
  2. Ten zmniejszony rysunek znajduje się na tym oryginalnym :|
0
  1. Nieproporcjonalnie(oryginalne wymiary to 1700x1200)
  2. Ten zmniejszony rysunek znajduje się na tym oryginalnym :|
  1. Sam musisz sobie wyliczyć proporcje - StretchDraw tylko "rozciąga" bitmapkę.
  2. To rysuj na canvasie nowej bitmapy.
  3. Zamiast pomocniczej zmiennej R można w wywołaniu StretchDraw() wywołać funkcje Rect(), która tworzy strukturę TRect z podanych parametrów (unikasz tworzenia zmiennych pomocniczych).
0

Juhas jeju ja Ci to niedawno chyba tłumaczyłem jak to zrobić. Dalej nie wiesz? :|

0

To ja się spytam tak: Jaka jest praktyczna różnica w użyciu StrechDraw i CopyRect? To znaczy czy któraś z tych funkcji rysuje inaczej (wolniej, dokładniej, czy któryś "miesza" sąsiadujące piksele, żeby powstało wrażenie dokładnego płynnego powiększenia)? Czy różnica polega tylko na składni? Z helpa nie udało mi się tego wyczytać :/.

0

To ja się spytam tak: Jaka jest praktyczna różnica w użyciu StrechDraw i CopyRect? To znaczy czy któraś z tych funkcji rysuje inaczej (wolniej, dokładniej, czy któryś "miesza" sąsiadujące piksele, żeby powstało wrażenie dokładnego płynnego powiększenia)? Czy różnica polega tylko na składni? Z helpa nie udało mi się tego wyczytać :/.

z help'a:

Use CopyRect to transfer part of the image on another canvas to the image of the TCanvas object. Dest specifies the rectangle on the canvas where the source image will be copied.

Call StretchDraw to draw a graphic on the canvas so that the image fits in the specified rectangle. StretchDraw calls the Draw method of the graphic. The graphic object determines how to fit into the rectangle

Set CopyMode to affect the way graphical images are drawn onto the canvas. The CopyMode is used when copying an image from another canvas using the CopyRect method. CopyMode is also used by TBitmap objects when they draw themselves to a canvas.

Use CopyMode to achieve a variety of affects when rendering an image. Achieve special effects like merged images and making parts of a bitmap transparent by combining multiple images with different CopyModes.

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