![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
BLOB поля.
Sholah_Weras © (2007-04-21 22:54:00)Здравствуйте!
Такая штука - надо разместить последовательно несколько картинок(изображений) в один графический файл. Посоветовали BLOB поля. Как их использовать - так и не дотренькал. Посему просьба - приведите пожалуйста код реализации этой задачи, ну иль ссылку на пример.
Заранее благодарен.
Sholah_Weras (2007-04-24 17:44:00) [1]Ладно, что-нибудь придумаю)
Спасибо)
{RASkov} (2007-04-24 17:41:00) [2]> [20] Sholah_Weras © (24.04.07 17:38)
Короче..... определись с классами(их методами) сопоставь что надо, я что нет.... и начни все заново....
Либо делай через Ж... дружбу разных классов.
Sholah_Weras (2007-04-24 17:38:00) [3]Блин, в том проблема, что надо связать эти несколько библиотек. А в последней строчке это не удается - нельзя, грит, 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:20:00) [4]> Используется TCanvas
Используется "стандартный" TCanvas...
{RASkov} (2007-04-24 17:19:00) [5]> [17] Sholah_Weras © (24.04.07 17:12)
Используется TCanvas значит нет никакого Альфа-канала...... Походу так.
Sholah_Weras (2007-04-24 17:12:00) [6]
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 16:42:00) [7]> [15] Sholah_Weras © (24.04.07 16:33)
Смотри что делает метод Draw у TImagingPNG.Canvas.....
Sholah_Weras (2007-04-24 16:33:00) [8]Извините, подвиньтесь - мне только посмотрть.
Sholah_Weras (2007-04-24 11:09:00) [9]^^^
Sholah_Weras (2007-04-23 22:20:00) [10]Хе-хе-хе) Таки это опять я.
Вот такой у меня вопрос - при вот таком вот копировании
PNG.Canvas.Draw(X, 0, BMP[i-1]);
Сохраняется ли альфа канал каждой картинки?
Я почему спросил - при сохранении файла альфа канал не сохраняется.
Предвосхищу вопрос - использую нестандартные компоненты, которые позволяют работать с альфа каналом формата .png
PNG: array of TImagingPNG
Sholah_Weras (2007-04-23 08:06:00) [11]По поводу абзацев - ширину то я узнавал, но, по всей видимости, не так и не там использовал - на выходе у меня получалась растянутая первая картинка, потому и подумал, что надо идтить другим путем :))
Пытался найти в массиве -1й элемент, не вышло :)
Теперь все это хозяйство сохранятеся правильно и так, как надо. Спасибо огромное, мастера)
{RASkov} (2007-04-22 22:08:00) [12]Кстати, я ведь потом перечитал [1] второй абзац, там ведь тоже самое, только словами и доходчиво. Походу автор вопроса не рыбак :(
{RASkov} (2007-04-22 22:07:00) [13]> [9] homm © (22.04.07 22:04)
У меня код с ошибками :)
Кому не дана рыбалка, тот так и не научится ловить рыбу.. А кто хочет научится, тот сделает выводы, признает свои ошибки и запомнит.., чтоб их больше не делать.
homm (2007-04-22 22:04:00) [14]> А кто размеры FBitMap'а выставлять будет?
Ну и зачем ты дал рыбу? :) Я так хотел его самого научить рыбачить :)
{RASkov} (2007-04-22 21:55:00) [15]> [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 21:18:00) [16]> FBitMap := TImagingBitmap.Create;
Читать [1], последний абзац. Читать каждое слово, вдумываться, что из сказаного сделано в коде, а что нет.
Sholah_Weras (2007-04-22 20:45:00) [17]Немного изменил - теперь копирование должно происходить из массива. Тут я использую сторонние компоненты из 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 19:03:00) [18]> Но в Image никакого изображения нет. В чем дело?
полный код, пожалуйста, этот огрызок ничего и не выведет.
Sholah_Weras (2007-04-22 13:08:00) [19]
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 11:34:00) [20]> С помошью чего надо размещать на картинке все изображения?
Это зпвисит от того, что представляют из себя картинки, куда ты их загружаешь. С большой долей вероятности могу предположить, что это набор TBitmap, тогда используй TBitmap.Canvas.Draw()