Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
ВнизBLOB поля. Найти похожие ветки
← →
Sholah_Weras © (2007-04-21 22:54) [0]Здравствуйте!
Такая штука - надо разместить последовательно несколько картинок(изображений) в один графический файл. Посоветовали BLOB поля. Как их использовать - так и не дотренькал. Посему просьба - приведите пожалуйста код реализации этой задачи, ну иль ссылку на пример.
Заранее благодарен.
← →
homm © (2007-04-21 23:04) [1]> Такая штука - надо разместить последовательно несколько
> картинок(изображений) в один графический файл. Посоветовали
> BLOB поля.
BLOB поля — это тип данных в Базах Данных, никакого отношения к картинкам не имеют, и уж точно с из помошью никак нельзя получить последовательно несколько картинок(изображений) в один графический файл.
Нужно посчитать ширину всех имеющихся изображений, найти наибольшую высоту, создать с такими размерами картинку(изображение), и как на холсте разместить на этой картинки все имеющиеся одну за другой, затем сохранить на диск, (например для TBitmap с помошью SaveToFile).
← →
Sholah_Weras © (2007-04-22 10:08) [2]С помошью чего надо размещать на картинке все изображения?
← →
homm © (2007-04-22 11:34) [3]> С помошью чего надо размещать на картинке все изображения?
Это зпвисит от того, что представляют из себя картинки, куда ты их загружаешь. С большой долей вероятности могу предположить, что это набор TBitmap, тогда используй TBitmap.Canvas.Draw()
← →
Sholah_Weras © (2007-04-22 13:08) [4]
For i := 0 To Length(ImagesFrame) - 1 Do
Begin
BitMap.LoadFromFile(ImagesFrame[i]);
FBitMap.Canvas.Draw(X, 0, BitMap);
Inc(X, Form1.BMP[0].Width);
End;
Image.Picture.Graphic := FBitMap;
Но в Image никакого изображения нет. В чем дело?
← →
homm © (2007-04-22 19:03) [5]> Но в Image никакого изображения нет. В чем дело?
полный код, пожалуйста, этот огрызок ничего и не выведет.
← →
Sholah_Weras © (2007-04-22 20:45) [6]Немного изменил - теперь копирование должно происходить из массива. Тут я использую сторонние компоненты из Imaging Library, иль что-то типа того.
var
BMP: array of TBitmap;
X: SmallInt;
FBitMap: TImagingBitmap;
FImage: TMultiImage;
FBitMap := TImagingBitmap.Create;
For i := 0 To Length(BMP) - 1 Do
Begin
FBitMap.Canvas.Draw(X, 0, BMP[i]);
Inc(X, BMP[0].Width);
End;
FImage := TMultiImage.Create;
FImage.Assign(FBitMap);
← →
homm © (2007-04-22 21:18) [7]> FBitMap := TImagingBitmap.Create;
Читать [1], последний абзац. Читать каждое слово, вдумываться, что из сказаного сделано в коде, а что нет.
← →
{RASkov} (2007-04-22 21:55) [8]> [7] homm © (22.04.07 21:18)
> TImagingBitmap
Да нормальный код... у него все картинки одной ширины :)
> [6] Sholah_Weras © (22.04.07 20:45)
А кто размеры FBitMap"а выставлять будет? И как верно заметил homm увеличивай X на ширину предыдущей картинки, а не первой...
var
BMP: array of TBitmap;
X: Integer;
FBitMap: TBitmap;
.................
FBitMap := TBitmap.Create;
FBitmap.Width:=<сумма всех ширин картинок>;
FBitmap.Height:=<высота самой большой>;
X:=0;
For i := 1 To Length(BMP) Do
Begin
FBitMap.Canvas.Draw(X, 0, BMP[i-1]);
Inc(X, BMP[i].Width);
End;
Image1.Picture.Assign(FBitMap);
← →
homm © (2007-04-22 22:04) [9]> А кто размеры FBitMap"а выставлять будет?
Ну и зачем ты дал рыбу? :) Я так хотел его самого научить рыбачить :)
← →
{RASkov} (2007-04-22 22:07) [10]> [9] homm © (22.04.07 22:04)
У меня код с ошибками :)
Кому не дана рыбалка, тот так и не научится ловить рыбу.. А кто хочет научится, тот сделает выводы, признает свои ошибки и запомнит.., чтоб их больше не делать.
← →
{RASkov} (2007-04-22 22:08) [11]Кстати, я ведь потом перечитал [1] второй абзац, там ведь тоже самое, только словами и доходчиво. Походу автор вопроса не рыбак :(
← →
Sholah_Weras © (2007-04-23 08:06) [12]По поводу абзацев - ширину то я узнавал, но, по всей видимости, не так и не там использовал - на выходе у меня получалась растянутая первая картинка, потому и подумал, что надо идтить другим путем :))
Пытался найти в массиве -1й элемент, не вышло :)
Теперь все это хозяйство сохранятеся правильно и так, как надо. Спасибо огромное, мастера)
← →
Sholah_Weras © (2007-04-23 22:20) [13]Хе-хе-хе) Таки это опять я.
Вот такой у меня вопрос - при вот таком вот копировании
PNG.Canvas.Draw(X, 0, BMP[i-1]);
Сохраняется ли альфа канал каждой картинки?
Я почему спросил - при сохранении файла альфа канал не сохраняется.
Предвосхищу вопрос - использую нестандартные компоненты, которые позволяют работать с альфа каналом формата .png
PNG: array of TImagingPNG
← →
Sholah_Weras © (2007-04-24 11:09) [14]^^^
← →
Sholah_Weras © (2007-04-24 16:33) [15]Извините, подвиньтесь - мне только посмотрть.
← →
{RASkov} (2007-04-24 16:42) [16]> [15] Sholah_Weras © (24.04.07 16:33)
Смотри что делает метод Draw у TImagingPNG.Canvas.....
← →
Sholah_Weras © (2007-04-24 17:12) [17]
procedure TCanvas.Draw(X, Y: Integer; Graphic: TGraphic);
begin
if (Graphic <> nil) and not Graphic.Empty then
begin
Changing;
RequiredState([csHandleValid]);
SetBkColor(FHandle, ColorToRGB(FBrush.Color));
SetTextColor(FHandle, ColorToRGB(FFont.Color));
Graphic.Draw(Self, Rect(X, Y, X + Graphic.Width, Y + Graphic.Height));
Changed;
end;
end;
Посмотрел. Мало что понял. На какую строчку смотреть то надо?
← →
{RASkov} (2007-04-24 17:19) [18]> [17] Sholah_Weras © (24.04.07 17:12)
Используется TCanvas значит нет никакого Альфа-канала...... Походу так.
← →
{RASkov} (2007-04-24 17:20) [19]> Используется TCanvas
Используется "стандартный" TCanvas...
← →
Sholah_Weras © (2007-04-24 17:38) [20]Блин, в том проблема, что надо связать эти несколько библиотек. А в последней строчке это не удается - нельзя, грит, assign BitMap и MultiImage.
А последний нужен, ибо потом все это дело в dds конвертирую. Зопа.
FBit := TBitMap.Create;
FBit.Width := PNG[0].Width * Length(PNG);
FBit.Height := PNG[0].Height;
For i := 0 To Length(PNG) - 1 Do
Begin
FBit.Canvas.Draw(X, 0, PNG[i]);
Inc(X, PNG[0].Width);
End;
FImage := TMultiImage.Create;
FImage.Assign(FBit);
← →
{RASkov} (2007-04-24 17:41) [21]> [20] Sholah_Weras © (24.04.07 17:38)
Короче..... определись с классами(их методами) сопоставь что надо, я что нет.... и начни все заново....
Либо делай через Ж... дружбу разных классов.
← →
Sholah_Weras © (2007-04-24 17:44) [22]Ладно, что-нибудь придумаю)
Спасибо)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.051 c