Форум: "Прочее";
Текущий архив: 2013.11.17;
Скачать: [xml.tar.bz2];
ВнизГугл хром браузер и bmp Найти похожие ветки
← →
alexdn © (2013-05-27 17:21) [0]Почему хром браузер не отображает bmp? Это что, у них политика такая? мол типа битмап это системный файл?
← →
RWolf © (2013-05-27 17:25) [1]у меня отображает.
← →
brother © (2013-05-27 17:27) [2]> типа битмап это системный файл?
сам понял, что сказал?
← →
alexdn © (2013-05-27 17:35) [3]а может даже по другому нужно было задать вопрос, почему гугл хром не считает битмапом файл, который делается в делфи так -
name:=SavePictureDialog1.FileName+".bmp";
Image1.Picture.Bitmap.SaveToFile(name);
← →
Jeer © (2013-05-27 17:37) [4]Хром предохраняет от э.. непотребства.
Угадал?
← →
Дмитрий СС (2013-05-27 17:37) [5]И слава богу. Допотопный формат, пора ему и вымереть (на ББ как минимум).
← →
брат Птибурдукова (2013-05-27 17:40) [6]Удалено модератором
← →
RWolf © (2013-05-27 17:40) [7]
> [3]
Скопипастил код, запустил, открыл. УМВР.
← →
alexdn © (2013-05-27 17:44) [8]Удалено модератором
← →
alexdn © (2013-05-27 17:47) [9]Но увы, ответ я так и не услышал.
← →
Игорь Шевченко © (2013-05-27 18:03) [10]в [1] ответили
← →
Eraser © (2013-05-27 18:03) [11]
> Дмитрий СС (27.05.13 17:37) [5]
bmp вымрет последний среди всех графических форматов.
← →
Дмитрий СС (2013-05-27 19:02) [12]
> Eraser © (27.05.13 18:03) [11]
Крайне сомнительное утверждение.
← →
Алканавт расправил плечи (2013-05-27 19:50) [13]
> Крайне сомнительное утверждение.
Проблемка в том, что и [5], и [11] правы
← →
antonn © (2013-05-27 20:25) [14]
> Крайне сомнительное утверждение.
никаких сомнений, особенно для тех кто с графикой работает
← →
Sapersky (2013-05-27 20:57) [15]Формат создаваемых в Дельфи битмапов по умолчанию 32-битный, при этом функции GDI затирают 4-й байт, а Хром считает его альфа-каналом.
В общем, PixelFormat := pf24Bit должно помочь.
← →
alexdn © (2013-05-27 21:07) [16]> Sapersky (27.05.13 20:57) [15]
Мерси, вот и ответ, а то я уже думал что это у меня глюки, а чего ж это Хром такой придирчивый? опера и ехплорер гораздо терпимее.. Или это уровень хром разработчиков (повышенный)?
← →
alexdn © (2013-05-27 21:15) [17]> Sapersky (27.05.13 20:57) [15]
> его альфа-каналом.
Ну точно, сама картинка есть, по размеру файла, но белая.
← →
alexdn © (2013-05-27 22:20) [18]> Sapersky (27.05.13 20:57) [15]
Совершенно дурной вопрос, почему функции GDI затирают 4-й байт, и почему Хром считает его альфа-каналом?
← →
antonn © (2013-05-27 22:47) [19]а почему бы не считать его альфаканалом, если и МС-овские функции типа updatelayeredwindow поступают так же
← →
Eraser © (2013-05-27 23:21) [20]
> alexdn © (27.05.13 22:20) [18]
смотря какие функции.
← →
Sapersky (2013-05-28 01:37) [21]Затирают альфу функции рисования вроде FillRect - видимо потому, что 4 байта проще и быстрее записать чем 3. Сейчас понятно, что лучше туда 255 писать, но во времена разработки GDI про прозрачность вообще не думали.
В современных граф. API и библиотеках 4-й байт однозначно ассоциируется с прозрачностью. С другой стороны, в стандарте bmp прозрачность не прописана (только в новых заголовках V4/V5, которые AFAIK никто не использует), 4-й байт полагается просто игнорировать. И здесь уж каждый сам решает, как делать - по стандарту или по общепринятым "понятиям".
На мой взгляд, возможность смотреть bmp с альфой полезна для графического вьюера - при условии, что её можно отключить (как в XnView, например). А браузерам лучше не выпендриваться и следовать стандарту.
← →
.пас и .бмп будут жить! (2013-05-28 02:04) [22]>никаких сомнений, особенно для тех кто с графикой
растром или вектором ? :)
> работает
← →
Дмитрий С © (2013-05-28 02:34) [23]
> никаких сомнений, особенно для тех кто с графикой работает
Ему повезло лишь потому, что его формат совпадает с форматом распакованной графики в памяти. Но как формат файла он, имхо, давно уже кончился. Опять же для ББ, для загрузки изображения в микроконтроллер, например, сгодится.
← →
alexdn © (2013-05-28 07:53) [24]> Sapersky (28.05.13 01:37) [21]
> А браузерам лучше не выпендриваться
> и следовать стандарту.
Какому стандарту, программирования как хром, или пользовательскому стандарту, как опера и эксплорер?
← →
Алканавт расправил плечи (2013-05-28 07:58) [25]
> Ему повезло лишь потому, что его формат совпадает с форматом
> распакованной графики в памяти
"Если это везение, то спортсмену везет каждый раз, когда он попадает ракеткой по мячу. Везение всегда лишь результат тщательной подготовки" http://flibusta.net/b/136940/read
← →
Dimka Maslov © (2013-05-28 08:21) [26]Нормальная программа при чтении файла любого формата сначала должна прочитать заголовок, а потом делать предположение о структуре данных. При этом если заголовок не понятен - выдать предупреждение о неправильном (неподдерживаемом) формате данных. Всё таки я не думаю, что в гугле разработчики подобного уровня, чтобы этого не делать. Так что проблема, скорее всего в другом месте, а именно в самом файле.
← →
alexdn © (2013-05-28 08:47) [27]> Dimka Maslov © (28.05.13 08:21) [26]
А чего не поддерживаемый формат то? всё правильно, а то что альфа канал затёрт это не гугла проблема.
← →
alexdn © (2013-05-28 09:06) [28]> Sapersky (27.05.13 20:57) [15]
> В общем, PixelFormat := pf24Bit должно помочь.
Form4.Image1.Picture.Bitmap.PixelFormat:=jf24Bit;
[DCC Error] Unit4.pas(1065): E2010 Incompatible types: "TBitmap" and "TJPEGPixelFormat"
← →
Алканавт расправил плечи (2013-05-28 09:24) [29]Всемилостивый будда Гаутама… Ты разницу между pf и jf видишь?..
← →
alexdn © (2013-05-28 09:34) [30]> Алканавт расправил плечи (28.05.13 09:24) [29]
Да, долго ржал, поставил -
Form4.Image1.Picture.Bitmap.PixelFormat:=pf24Bit; - в хроме видно;
Form4.Image1.Picture.Bitmap.PixelFormat:=pf32Bit; - в хроме исчезает;
как жить?)
← →
alexdn © (2013-05-28 09:45) [31]Это что ж, хром получается Эмбаркадеро большой привет передал?:)
← →
alexdn © (2013-05-28 10:06) [32]В свете вышеизложенного так и хочется спросить а что там у microsoft с сохранением bmp? в с и с#?
← →
Дмитрий С © (2013-05-28 10:08) [33]
> Это что ж, хром получается Эмбаркадеро большой привет передал?
> :)
при pf32Bit ты можешь сам задать значения этого альфаканала, причем тут эмбаркадеро
← →
antonn © (2013-05-28 10:11) [34]
> Dimka Maslov © (28.05.13 08:21) [26]
>
> Нормальная программа при чтении файла любого формата сначала
> должна прочитать заголовок, а потом делать предположение
> о структуре данных. При этом если заголовок не понятен -
> выдать предупреждение о неправильном (неподдерживаемом)
> формате данных. Всё таки я не думаю, что в гугле разработчики
> подобного уровня, чтобы этого не делать. Так что проблема,
> скорее всего в другом месте, а именно в самом файле.
если ты в дельфи просто сменишь pf24bit на pf32bit, то получится битмап с зануленной альфой (4-й байт) который браузер и старается отобразить согласно заголовку. поэтому прежде чем указывать формат в 4 байта битмапу следует понимать что случится и зачем оно надо
← →
alexdn © (2013-05-28 10:17) [35]> antonn © (28.05.13 10:11) [34]
вообще эмбаркадеро лихо поступили, давайте мол обнулим, это они наверное первого апреля решили)..
← →
robt5 (2013-05-28 10:26) [36]проблема в том что "Гугл овцы" зазвездились малясь, недавно только была тема что он jpeg в CMYK некоректно отображает, я уж молчу про "безопасность"
← →
robt5 (2013-05-28 10:29) [37]
> alexdn © (28.05.13 10:17) [35]
ну что ты бредишь то ?
они должны были цифровой шум туда набить?
альфаканал заполняется програмистом
← →
alexdn © (2013-05-28 10:37) [38]> robt5 (28.05.13 10:29) [37]
Да нет, я скорее к тому, что стандартная конструкция должна идти в виде -
name:=SavePictureDialog1.FileName+".bmp";
Image1.Picture.Bitmap.PixelFormat:=pf24Bit;
Image1.Picture.Bitmap.SaveToFile(name);
чтобы проблем не было.. или действительно pf32Bit, но тогда и альфа канал на 255 прописывать. Но кстати кроме хрома нигде таких проблем больше не всплывало.
← →
antonn © (2013-05-28 12:09) [39]
> Да нет, я скорее к тому, что стандартная конструкция должна
> идти в виде -
хм, а теперь tbitmap дефолтно в формате 32-х бит создается в новых студиях?
← →
alexdn © (2013-05-28 12:21) [40]> antonn © (28.05.13 12:09) [39]
в 2010 выходит что так. Кстати, как оговорить альфа канал для bmp? что то нигде не могу найти..
← →
Дмитрий СС (2013-05-28 13:39) [41]С помощью ScanLine
← →
Дмитрий СС (2013-05-29 14:07) [42]Вот пример:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Math;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure HitTest(var M: TWMNCHitTest); message WM_NCHITTEST;
protected
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.HitTest(var M: TWMNCHitTest);
begin
M.Result := HTCAPTION;
end;
procedure AlphaPremultiBmp(Bmp: HBITMAP);
var
BmpInfo:Windows.TBitmap;
Point: PRGBQuad;
I:Integer;
begin
GetObject(Bmp, SizeOf(BmpInfo), @BmpInfo);
Point := BmpInfo.bmBits;
for i:=0 to pred(BmpInfo.bmWidth * BmpInfo.bmHeight) do
begin
Point^.rgbBlue := MulDiv(Point^.rgbBlue, Point^.rgbReserved, 255);
Point^.rgbGreen := MulDiv(Point^.rgbGreen, Point^.rgbReserved, 255);
Point^.rgbRed := MulDiv(Point^.rgbRed, Point^.rgbReserved, 255);
inc(Point);
end;
end;
procedure TForm1.FormShow(Sender: TObject);
var
Bmp: TBitmap;
SignBmp: TBitmap;
BmpC, SignC: PRGBQuad;
X, Y: Integer;
Pt: TPoint;
Sz: TSize;
F: TBlendFunction;
ScreenDC, BmpDC, SavedDC: HDC;
begin
SetWindowLong(Handle,
GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
Bmp := TBitmap.Create;
try
Bmp.PixelFormat := pf32bit;
Bmp.Width := ClientWidth;
Bmp.Height := ClientHeight;
SignBmp := TBitmap.Create;
try
SignBmp.PixelFormat := pf32bit;
SignBmp.Width := ClientWidth;
SignBmp.Height := ClientHeight;
SignBmp.Canvas.Brush.Color := clBlack;
SignBmp.Canvas.Brush.Style := bsSolid;
SignBmp.Canvas.FillRect(Rect(0,0, SignBmp.Width, SignBmp.Height));
SignBmp.Canvas.Font.Name := "Times";
SignBmp.Canvas.Font.Size := 72;
SignBmp.Canvas.Font.Color := clWhite;
SignBmp.Canvas.TextOut(10, 10, "Hello, Kitty!");
for Y := 0 to Pred(Bmp.Height) do
begin
BmpC := Bmp.ScanLine[Y];
SignC := SignBmp.ScanLine[Y];
for X := 0 to Pred(Bmp.Width) do
begin
ZeroMemory(BmpC, SizeOf(BmpC^));
BmpC^.rgbRed := Y * 255 div Bmp.Height;
BmpC^.rgbBlue := (255 - Y * 255 div Bmp.Height) div 4;
BmpC^.rgbGreen := SignC^.rgbGreen;
BmpC^.rgbReserved := 255 - X * 255 div Bmp.Width; // random alpha
Inc(BmpC);
Inc(SignC);
end;
end;
finally
SignBmp.Free;
end;
ZeroMemory(@Pt, SizeOf(Pt));
Sz.cx := ClientWidth;
Sz.cy := ClientHeight;
ZeroMemory(@F, SizeOf(F));
F.BlendOp := AC_SRC_OVER;
F.AlphaFormat := AC_SRC_ALPHA;
F.SourceConstantAlpha := 255;
AlphaPremultiBmp(Bmp.Handle);
ScreenDC := GetDC(0);
try
BmpDC := CreateCompatibleDC(ScreenDC);
try
SavedDC := SelectObject(BmpDC, Bmp.Handle);
try
UpdateLayeredWindow(Handle, ScreenDC, nil, @Sz, BmpDC, @Pt, 0, @F, ULW_ALPHA);
finally
SelectObject(SavedDC, Bmp.Handle);
end;
finally
DeleteDC(BmpDC);
end;
finally
ReleaseDC(0, ScreenDC);
end;
finally
Bmp.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
BorderStyle := bsNone;
FormStyle := fsStayOnTop;
end;
end.
← →
Rouse_ © (2013-05-29 22:21) [43]
> Дмитрий СС (29.05.13 14:07) [42]
ScreenDC и BmpDC := CreateCompatibleDC(ScreenDC); лишние, а так-же SelectObject лишнее.
Вместо первого достаточно нуля, вместо второго хэндла канваса битмапа с альфаканалом.
← →
Rouse_ © (2013-05-29 22:30) [44]Удалено модератором
Примечание: промахнулся...
← →
Rouse_ © (2013-05-29 22:30) [45]Блин... вот так:
UpdateLayeredWindow(Handle, 0, nil, @Sz, Bmp.Canvas.Handle, @Pt, 0, @F, ULW_ALPHA);
{ScreenDC := GetDC(0);
try
BmpDC := CreateCompatibleDC(ScreenDC);
try
SavedDC := SelectObject(BmpDC, Bmp.Handle);
try
UpdateLayeredWindow(Handle, ScreenDC, nil, @Sz, BmpDC, @Pt, 0, @F, ULW_ALPHA);
finally
SelectObject(SavedDC, Bmp.Handle);
end;
finally
DeleteDC(BmpDC);
end;
finally
ReleaseDC(0, ScreenDC);
end; }
← →
Rouse_ © (2013-05-29 22:31) [46]зы и AlphaPremultiBmp тоже избыточен.
← →
Дмитрий С © (2013-05-29 23:40) [47]
> зы и AlphaPremultiBmp тоже избыточен.
Вот тут пишут что нужен для BLENDFUNCTION:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183393(v=vs.85).aspx
Да и разница есть:
http://yadi.sk/d/vEv7wVJO5JDdm
Слева без AlphaPremultiBmp, справа с ним.
> Rouse_ © (29.05.13 22:30) [45]
Действительно работает. Тем более в моем примере, который я еще в 2008 году написал, примерно так и написано. А в этом примере, пока я его писал, почему-то не работало, поэтому я сделал так. Видимо пока делал, исправил что-то.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2013.11.17;
Скачать: [xml.tar.bz2];
Память: 0.58 MB
Время: 0.004 c