Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.03 c
15-1176097410
Девушка
2007-04-09 09:43
2007.05.13
Итеративный ЖЦ разработки


4-1166178056
niko
2006-12-15 13:20
2007.05.13
Создание окна с помощью CreateWindowEx в Си


2-1177399226
webpauk
2007-04-24 11:20
2007.05.13
Работа с потоками


4-1166014068
dzuev
2006-12-13 15:47
2007.05.13
datamax и delphi.


2-1177391484
allucard
2007-04-24 09:11
2007.05.13
Указатели