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
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
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ą.
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;
Bmp.Free;
Jpg.Assign(Bmp)
access violation?
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...
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)?
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.
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:
Niestety lub stety rozciąganie musi być pionowe.
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?
teoretycznie mozna, wlasnie o to mi chodzilo :)