BitBltから画面の一部を取得し、TBitmapにまで受け渡し作業をした後で
減色をしようとTBitmap.PixelFormat := pf8bit;のようにすると
実行時に「このコマンドを実行するのに十分な記憶域がありません。」と
エラーが出ます。PixelFormatを使わなければ問題なく最後までいくので
すが減色したいので。
TBitmapに受け渡す時、HBitmapから代入しているのですがそういう事が
原因でPixelFormatが使用できないのでしょうか?
PixelFormatを使わずとしてもBitBltからTBitmapに至る過程で減色するには
どうしたらいいのでしょうか?何か方法があればよろしくお願いします。
>TBitmapに受け渡す時、HBitmapから代入しているのですが
の意味が分かりません。
とりあえず最小コードで動作確認しました。
procedure TForm1.Button1Click(Sender: TObject);
var
bmp :TBitmap;
bmp2:TBitmap;
begin
bmp:=TBitmap.Create;
bmp.LoadFromFile('test.bmp');
bmp2:=TBitmap.Create;
bmp2.Width :=50;
bmp2.Height:=50;
BitBlt(bmp2.Canvas.Handle,0,0,50,50,bmp.Canvas.Handle,0,0,SRCCOPY);
bmp2.PixelFormat:=pf1bit; //pf8bit
bmp2.SaveToFile('aaa.bmp');
bmp2.Free;
bmp.Free;
end;
ありがとうございます。
画像ファイルからではなく画面から実際に取得していくと
HBitmapを使うんじゃないかな?と思いますがどうなんで
しょうか?
BitBlt() でデスクトップから TBitmap に写し取るんですから
HBitmap は関係ありません。
「delphi キャプチャ」で検索するとたくさん見つかります。
例えば
http://www.hi-ho.ne.jp/tadokoro/menu/menu8_3.html
HBitmapは一般的な表現じゃないですね。
恐らくデバイスコンテキストのハンドルだとは検討つきますけど。
ビットマップのハンドルとの違いは調べて損はないですぞ。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpgdi/html/_win32_bitblt.asp
procedure TForm1.Button2Click(Sender: TObject);
var
bmp:Tbitmap;
dc:hdc;
begin
bmp:=Tbitmap.Create;
bmp.width :=100;
bmp.height:=100;
dc:=getdc(0);
BitBlt(bmp.canvas.handle,0,0,bmp.width,bmp.height,dc,0,0,srccopy);
releasedc(0,dc);
bmp.PixelFormat:=pf1bit;
bmp.SaveToFile('bbb.bmp');
bmp.free;
end;
もにゃさん、えーとさん ありがとうございます
HBitmap関係なくできますね。
だいぶ前のソースなんでどうやって作ったか忘れましたが
目的を達成するためにあちこちのサンプルから繋ぎ繋いだ
のかもしれません^^;
だいたいこんな感じで書いていました。
var
bit: tbitmap;
Bitmap: HBitmap;
D, DC: HDC;
begin
DC:=CreateDC('DISPLAY', nil, nil, nil);
d:=CreateCompatibleDC(dc);
Bitmap:=CreateCompatibleBitmap(DC, xx, yx);
SelectObject(D,Bitmap);
BitBlt(D, 0, 0, xx, yx, dc,widsi,heisi, srccopy);
bit:=TBitmap.Create;
Bit.Width:=100;
Bit.Height:=100;
Bit.Handle:=Bitmap;
上記が修正前のやつです。
> BitBlt(bmp2.Canvas.Handle,0,0,50,50,bmp.Canvas.Handle,0,0,SRCCOPY);
このやり方は以前にわかってたはずなのですがなぜ直接渡さなかったのか記憶に
残っていません^^;
無事解決できました。ありがとうございました^^お二人に感謝します^^
チェックし忘れてました^^;
ツイート | ![]() |