Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BLOB поля.


Страницы:   1 2

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()


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо