Scalanie obrazków w jeden

0

Witam,
mam pytanie jak można w prosty sposób (ale wydajny)
scalić kilka plików JPG (wyższa jakość - pliki po 1 mb i więcej) w jeden plik.
czyli z 3 plikow otrzymamy 1 plik o tej samej szerokosci, ale o wysokosci 3 razy wiekszej.

Pozdrawiam

0

tzn. o co ci chodzi? Masz 3 obrazki i chcesz je narysować na jednym płótnie jeden pod drugim? (np. funkcją Draw podając pozycję coraz niższe?) czy co? Napisz co próbowałeś zrobić, łatwiej ci ludzie pomogą.

2
var Jpg:TJPEGImage;
var BmpA,BmpB,BmpC,Bmp:TBitmap;

Jpg:=TJPEGImage.Create;
Jpg.LoadFromFile('1.jpg');
BmpA:=TBitmap.Create;
BmpA.Assign(Jpg);
Jpg.LoadFromFile('2.jpg');
BmpB.Assign(Jpg);
Jpg.LoadFromFile('3.jpg');
BmpC.Assign(Jpg);
Bmp:=TBitmap.Create;
Bmp.Height:=BmpA.Height+BmpB.Height+BmpC.Height;
Bmp.Width:=BmpA.Width;
Bmp.Canvas.Draw(0,0,BmpA);
Bmp.Canvas.Draw(0,BmpA.Height,BmpB);
Bmp.Canvas.Draw(0,BmpA.Height+BmpB.Height,BmpC);
BmpA.Free;
BmpB.Free;
BmpC.Free;
Jpg.Assign(Bmp);
Bmp.Free;
Jpg.SaveToFile('123.jpg');
Jpg.Free;
1
Bmp.Free;
Jpg.Assign(Bmp)

access violation?

0

Dziękuję bardzo mi to pomaga. Rozwiązanie OK.
Sprawdziłem dla 3 plików jpg ok. 300kb i działa, muszę jeszcze sprawdzić jutro czy np scalenie 3 plików po 5 mb nie będzie problemem...

0

Wiem co to jest TStrings :D

Mam pytanie a jak zrobić, gdy na wejściu są 3 obrazy, ale o orientacji poziomej, zeby scaliło je tak, że wszystkie będą pionowo scalone(obrocone jakby)?

0

Zastanawia mnie czy jedyne wyjście to BMPA BMPB i BMPC obrócic o 90 stopni przed scaleniem?

Piszę ze szkoły, nie mam pod ręką delphi zeby sprawdzic swoje przypuszczenia, stąd pytam, żeby wieczorem już wiedziec co i jak.

0

A po co komplikować sobie życie i marnować czas procesora na obracanie? Przecież za rozmiary obrazu docelowego odpowiadają te dwie linijki:

Bmp.Height := BmpA.Height + BmpB.Height + BmpC.Height;
Bmp.Width  := BmpA.Width;

więc zamiast rozciągania w dół - rozciąg w prawo:

Bmp.Height := BmpA.Height;
Bmp.Width  := BmpA.Width + BmpB.Width + BmpC.Width;

i narysuj po kolei wszystkie trzy wykorzystując offset poziomy zamiast pionowego;


Jednak ten algorytm będzie poprawny jedynie dla plików o tych samych rozmiarach, czyli przy:

  • scalaniu pionowym gdy wszystkie obrazy mają tą samą szerokość,
  • scalaniu poziomym gdy wszystkie obrazy mają tą samą wysokość,
    w innym przypadku obrazy albo zostaną przycięte, albo pojawią się puste przestrzenie (prawdopodobnie białego koloru).
0

Niestety lub stety rozciąganie musi być pionowe.

0

Mam pytanie a jak zrobić, gdy na wejściu są 3 obrazy, ale o orientacji poziomej, zeby scaliło je tak, że wszystkie będą pionowo scalone(obrocone jakby)?

A to nie można scalić poziomo i wtedy raz obrócić wynikowy obraz?


What is the fastest way to rotate a jpg image file?

0

teoretycznie mozna, wlasnie o to mi chodzilo :)

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