環境はWindows、VisualStudio2010です。
既存のBMPファイルなどとは全く無関係に
座標(0,0)にRGBで255,255,0
座標(0,1)にRGBで255,0,255
...
全体の大きさは縦x横 = 20,30
背景の色はRGBで0,0,0
の情報があるとします。生データで、1ドットの大きさとかの概念はありません。
これをクリップボードに画像として存在する方法はありますか?
ネットを検索すると、既存の画像ファイルをクリップボードにコピーする等の方法はありましたが、自分の生データをそうする手段が無かったです。
No.3ベストアンサー
- 回答日時:
HGLOBAL hGlobal= GlobalAlloc(GHND | GMEM_SHARE,
sizeof(BITMAPINFOHEADER) + 32 * 32 * sizeof(DWORD));
BITMAPINFOHEADER *pBmpInfoHeader = (BITMAPINFOHEADER *)GlobalLock(hGlobal);
ZeroMemory(pBmpInfoHeader, sizeof(BITMAPINFOHEADER));
pBmpInfoHeader->biSize = sizeof(BITMAPINFOHEADER);
pBmpInfoHeader->biWidth = 32;
pBmpInfoHeader->biHeight = 32;
pBmpInfoHeader->biPlanes = 1;
pBmpInfoHeader->biBitCount = 32;
pBmpInfoHeader->biCompression = BI_RGB;
DWORD *pBits = (DWORD *)(pBmpInfoHeader + 1);
for(int y=0; y<32; ++y){
for(int x=0; x<32; ++x) pBits[y*32+x] = (red << 16) + (green << 8) + blue;
}
GlobalUnlock(hGlobal);
if(OpenClipboard(GetHWND()) != 0){
EmptyClipboard();
SetClipboardData(CF_DIB, hGlobal);
CloseClipboard();
}
こんなのが基本。red、green、blueは適当に置き換えて下さい。
32BITRGBの場合です。
Bottom-up bitmap になってますが
Top-down bitmapにするなら
biHeightを負にして下さい。
また、biBitCount が32以外の場合、もう少し気を使う必要が有ります。
返答ありがとうございます
書き忘れましたが、作っているのはコンソールアプリケーションです。
GetHWNDが無かったので省略したところ、正常終了してもクリップボード上に画像が無かったです。
どうすればいいのでしょうか。
#include "stdafx.h"
#include <Windows.h>
// GetHWNDはafxctl.h? コンソールアプリケーションでは無い?
int _tmain(int argc, _TCHAR* argv[]) {
HGLOBAL hGlobal= GlobalAlloc(GHND | GMEM_SHARE,sizeof(BITMAPINFOHEADER) + 32 * 32 * sizeof(DWORD));
割愛
DWORD *pBits = (DWORD *)(pBmpInfoHeader + 1);
for(int y=0; y<32; ++y){
for(int x=0; x<32; ++x) {
int red = 255;
int green = 255;
int blue = 255;
pBits[y*32+x] = (red << 16) + (green << 8) + blue;
}
}
GlobalUnlock(hGlobal);
// if(OpenClipboard(GetHWND()) != 0){
EmptyClipboard();
SetClipboardData(CF_DIB, hGlobal);
CloseClipboard();
// }
return 0;
}
No.1
- 回答日時:
例えば、
CreateBitmapでビットマップを作成。
BitBltで質問者さんのデータをビットマップにコピー。ないし書き込み。
OpenClipboardでクリップボードを開く。
EmptyClipboardでクリップボードを空に。
SetClipboardDataでビットマップを格納。
とか。
こちらは.bmpからビットマップを読み込む処理ですが。
F-Basic Programming Tips - クリップボードへ転送と取り出し(BITMAP)
http://tokovalue.jp/SetClipboardData_U.htm
返答ありがとうございます。
HPを見ましたが、CかC++では無いようです。
CかC++の完結したまたは完結に近いサンプルは無いでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- フリーソフト GIMPの使い方 1 2022/07/11 13:52
- 生物学 脳の記録部位の集計方法について 1 2022/06/11 21:26
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- 文学 ない 1 2022/06/14 09:22
- 一眼レフカメラ 「Imaging Edge」を手動起動せず、ARWファイルを最高画質JPEGへ変換する方法は? 2 2022/08/05 11:38
- Windows 10 explorerをedgeで開く方法 2 2022/06/05 14:59
- 写真・ビデオ 写真や動画を保存する、これらを満たしたサービスはありませんか。 ・iOS, Android, Mac 2 2023/07/30 18:35
- Windows 10 Windows10の回復環境 2 2023/02/03 19:13
- その他(ソフトウェア) IndesignのGPUは色?CMYKなの?RGBなの? 1 2022/05/09 19:13
- ノートパソコン パソコンのデータ移行 9 2022/12/30 09:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で、画像の、指定した座標の...
-
UWSファイルの編集?
-
エクセルVBAで画像を貼り付ける...
-
UWSCのCHKIMG関数について
-
UWSCでPEEKCOLORを使い指定ウィ...
-
Unityでピクセル情報を取得する...
-
VBでデスクトップ上のアイコン...
-
uwscについて、同一の画像(仮...
-
自動運転の車線維持機能について
-
VBAで ScreenToClient を使いたい
-
scilabで階段状のグラフを描きたい
-
AUTO CAD2007で長方形(四角)を...
-
外付ディスプレイで AutoHotkey...
-
VCでの問題・・・
-
マウスイベントが動かない
-
Excel VBAで他アプリケーション...
-
もしかして
-
エクセルで、日付を入力すると...
-
「ご処理進めて頂きますようお...
-
リストボックスの選択解除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで画像を貼り付ける...
-
Excel VBAで他アプリケーション...
-
C#で、画像の、指定した座標の...
-
外付ディスプレイで AutoHotkey...
-
uwscについて、同一の画像(仮...
-
VBでクリックイベントを発生さ...
-
UWSファイルの編集?
-
NoxPlayerとUWSCのadbの座標に...
-
VBAで ScreenToClient を使いたい
-
バナーにリンクを埋め込む方法
-
UWSCのCHKIMG関数について
-
マウスイベントが動かない
-
UWSC画像認識で座標の位置がず...
-
VBA HTML要素または文字の座標...
-
ピクチャーボックスのスケール...
-
画像の座標取得
-
LineTo,MoveToについて
-
puctureBoxの一部の色を変えた...
-
bitbltからの画像保存ができま...
-
マウスカーソルの移動
おすすめ情報
返答ありがとうございます。
CかC++の完結したまたは完結に近いサンプルは無いでしょうか。
先ほど、tknakamuri殿回答でコンソールアプリケーションの場合はどうする?との間の抜けた再質問をしてしまいましたが、NULLを指定して解決しました。