Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
ВнизЧто с иконками?, я не понимаю... Найти похожие ветки
← →
Borealis (2003-08-18 20:21) [0]Было у меня с десяток красивых иконок (файлов с расширением .ico). В одном из своих проектов, я "загнал" эти иконки в
TImageList
. Спустя некоторое время, файлы иконок затерялись где-то в джунглях винчестера, и я решил восстановить их из старого проекта. Делаю примерно так:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
ico: TIcon;
begin
ImageList1.DrawingStyle := dsNormal;
ico := TIcon.Create;
for i := 0 to ImageList1.Count - 1 do
begin
ImageList1.GetIcon(i, ico);
ico.SaveToFile("C:\Icons\" + IntToStr(i) + ".ico");
end;
ico.Free;
end;
Открываю каталог "C:\Icons"... Ой!.. Что это?.. Что это за жалкое зрелище? Впечатление, что иконки неделю колбасило в стиральной машине и они там бесжалостно полиняли... :(
(Я наверно что то не так сделал?)
← →
Fenik (2003-08-19 00:00) [1]PixelFormat?
← →
Borealis (2003-08-19 00:27) [2]
> Fenik © (19.08.03 00:00) [1]
> PixelFormat?
??? Это в чём? ВTIcon
или вTImageList
? Так ни в том ни в том нет такого свойства.
Я знаю свойствоPixelFormat
есть уTBitmap
, но он к моей проблеме не относится...
← →
Некрофил - затейник__ (2003-08-19 07:10) [3]2 Borealis
Ты разрешение не менял ? like 32 -> 16
← →
Borealis (2003-08-21 22:56) [4]
> Некрофил - затейник__ © (19.08.03 07:10) [3]
> 2 Borealis
> Ты разрешение не менял ? like 32 -> 16
В смысле разрешение экрана? Нет, у меня всегда стоит True Color.
Странная тишина. Либо никто не знает ответа, либо у всех нормально работает, либо никто не сталкивался с этой проблемой.
Я подготовил небольшой тест. Пожалуйста, уделите ему немного своего внимания...
Положите на форму дваTImage
(Image1
иImage2
) иTButton
(Button1
). В обработчик событияOnClick
у кнопки скопируйте следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitmap;
ico: TIcon;
iml: TImageList;
// Здесь просто прорисовка картинки и не заслуживает вашего внимания.
// Смотрите начиная с begin метода OnClick
procedure DrawBitmap();
var
X, Y: Integer;
Xe, Ye, R: Extended;
function SmoothColor(E: Extended; Color0, Color1: TColor): TColor;
begin
Result := RGB(
Trunc(GetRValue(Color1) * E + GetRValue(Color0) * (1 - E)),
Trunc(GetGValue(Color1) * E + GetGValue(Color0) * (1 - E)),
Trunc(GetBValue(Color1) * E + GetBValue(Color0) * (1 - E)));
end;
begin
bmp := TBitmap.Create;
bmp.Width := 32;
bmp.Height := 32;
for X := 0 to 31 do
for Y := 0 to 31 do
begin
Xe := (2 * (X - 3) / 26 - 1);
Ye := (2 * (Y - 3) / 26 - 1);
R := Sqrt(Xe * Xe + Ye * Ye);
if R > 1 then
bmp.Canvas.Pixels[X, Y] := SmoothColor(1 / (R * R * R), clBlack, clMaroon)
else
bmp.Canvas.Pixels[X, Y] := SmoothColor(cos(R * pi / 2), clMaroon, clYellow);
end;
end;
begin
// Сначала нужно создать и разрисовать иконку.
// Так как у TIcon нет канвы, то рисовать приходится весьма загадочным способом:
// (1) Создаю TBitmap и рисую на нём:
DrawBitmap;
// (2) Создаю TImageList и добавляю в него bmp:
iml := TImageList.CreateSize(32, 32);
iml.AddMasked(bmp, clBlack);
bmp.Free;
// (3) Наконец создаю TIcon и загружаю в него первое изображение из TImageList
ico := TIcon.Create;
iml.DrawingStyle := dsNormal;
iml.GetIcon(0, ico);
iml.Free;
// Всё. Иконка создана. Теперь её можно отобразить:
Image1.Picture.Icon := ico;
ico.Free;
// Теперь сохраняю иконку в файл...
Image1.Picture.Icon.SaveToFile("c:\MyIcon.ico");
// ...и загружаю во второй TImage
Image2.Picture.Icon.LoadFromFile("c:\MyIcon.ico");
// Сравните эти два изображения. Посмотрите файл MyIcon.ico.
// Что я делаю не так? А если всё верно, то как обойти эту фичу?
end;
← →
Sheng (2003-08-21 23:45) [5]Это скорее всего глюг толи TImageList, толи Винды. У меня такое было несколько раз. Я просто открываю ImageList, а там - грязь. Только удалить все иконки от туда и загрузить туда заново... :(
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c