Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
15-1176287585
palva
2007-04-11 14:33
2007.05.13
Меня просили напомнить


3-1172343764
DmitrichJ
2007-02-24 22:02
2007.05.13
InterBase-Generator-Trigger. Как узнать сгенерированный номер?


3-1172238690
Tor
2007-02-23 16:51
2007.05.13
Открытая транзакция


2-1177346544
Kolan
2007-04-23 20:42
2007.05.13
Можно ли редактировать ячейки TListView?


4-1166102906
gary
2006-12-14 16:28
2007.05.13
Hook





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский