C言語相談室(上級者専用)
■ このスレッドは過去ログ倉庫に格納されています
文字の回転の件だけど、座標変換を完璧にやれ、ってダメ出しが来た。
論理座標変換、文字幅変換、文字の傾き変換、世界変形を全部完璧にしないとOKが出ないみたい。
変形はアフィン変換も含むらしい。 いや意味が分からん。これのことか?
https://jira.reactos.org/browse/CORE-15319
90度を実装したら表示されるはずだが、表示されないと言うのだから、追わなければ分からんね。
或いは、
本来: https://jira.reactos.org/secure/attachment/36563/correct%20font%20rendering.png
現状: https://user-images.githubusercontent.com/2107452/50544530-bae9d080-0c3b-11e9-8028-200a4b9a8840.png
> lfWidth parameter was ignored.
> MS Sans Serif shouldn't be rotated.
IfWidthが無視されているのはテンポラリの実装ならありではあるが意味不明、
MS Sans Serifが回転している=回転にフォント依存があるのは全く意味不明、といったところか。
てかマジな話、どんな実装したらこんな事になるんだ?
俺はフォントのことは詳しくは知らないが、PostScriptと同様に2次ベジエの再帰でレンダリングしているとすると、
各ストロークの参照点を回転行列に突っ込めば回転するし、y=ax的に平行移動すればイタリックが得られる。
だからイタリックと回転は同じコード(アフィン変換)で実装出来るはずで、そこを言及した。
この場合、当然IfWidthやフォント種類と回転/イタリックは直交しているので、
○○フォントの場合は回転がおかしくなる、なんて事は発生し得ないし、IfWidthを無視するような事も逆に難しい。
ただし実際にそうなっているのなら、それはおかしなコードが紛れ込んでいるはずだ。
それを除去して、正しい場所にアフィン変換を突っ込むのが正当なやり方だと思うぜ。
つか、今のコードもアフィン変換してないのか?それで回転してるってのも凄いとは思うが。 scriptなんかは明らかに書体が違うし回転する以前に
同じフォントが同じ書体、同じサイズで表示されるのか
環境を揃えて比較できる状態なのかが怪しい MS Sans Serifは、Windowsではビットマップフォントだから、回転は無視される。ReactOSでは代替フォントとして実装されていて、ビットマップフォントではない。
だれかが、MS Sans Serifのクローンを作れば解決する問題だが、まだ未解決。 ReactOSにはSagoe Scriptフォントは存在しないし、実装する予定もない。 変形行列の指定には、FreeTypeライブラリのFT_Set_Transformを使うこと。これ以外の方法はない。 >>184,185
それ(ビットマップフォントは回転しない)が仕様ならそれで構わないと思うが、問題は、
A. windowsがビットマップフォントでReactOSで非ビットマップフォントの場合、回転する
B. windowsが非ビットマップフォントでReactOSでビットマップフォントの場合、回転しない
で、おそらく
https://jira.reactos.org/browse/CORE-15319
についてはBが該当して表示されていないのだろう。(これは確認してみた方がいい)
対策としては
B1. 辞書を作って名前で対応
B2. ビットマップフォントも回転させる
のどちらかだが、B1でもどのみち「ビットマップフォントを回転させる」機構は必要だから、
最初からB2で対応するのがいい。
(この場合、
C. windowsもReactOSもビットマップフォントで、回転しない
ケースで非互換になるが、問題にはならないはず)
ここで、選択肢は、
α: ビットマップフォントでも常に回転する
β: 90/180/270°の時のみビットマップフォントでも回転する
の2つで、βでも実質問題はないはず。
>>187
lfWidthもFT_Set_Transformで対応出来そうだし、問題無いように見えるが。
少なくとも現状の回転がそれで機能しているのだから、APIは正しく機能しているし。 FT_Set_Transform関数は、現在の変形行列と平行移動を指定するもの。この他にFT_Matrix_Multiply、FT_Vector_Transform関数が使える。
変形行列と平行移動を合わせて仮にTransMatrix構造体として表すものとすれば、
typedef struct {
FT_Matrix mat;
FT_Vector vec;
} TransMatrix;
さらに、TransMatrix同士の積TransMatrix_Multiplyを定義する。 論理座標変換用のTransMatrix_LPtoDP、
lfWidth変換用のTransMatrix_Width、
lfEscapement変換用のTransMatrix_Escape、
さらに世界変形用のTransMatrix_Worldを定義し、
それぞれを掛け合わせれば、変換後の座標が定義できる。。。
といった感じなんだが。 結合則を満たすように積を定義する方法はないだろうか? 何かを中心に回転移動するというのが一つのTransMatrixでは表現できないように思える。
中心点まで平行移動して回転移動してまた中心点を戻すというやり方じゃないといけないような。 行列は非可換であって、結合規則自体は満たしていたと思ったが。
それ以前に結合する意味はなくて、単なる積だとも思うが。
http://www.geisya.or.jp/~mwm48961/kou2/mobile/matrix3_m.html >>193
何か大幅に勘違いしていると思うが。
2x2の行列(=FT_Set_Transform)なら原点は移動出来ないから単なる一次変換であり、斜体/回転までだ。
つまり仕様としては字毎にレンダリングしろ、という事だろ。これも問題ないと思うが。
(平行移動(原点移動)が必要なら3x3行列でアフィン変換となる) ならば、
typedef struct {
FT_Vector vec1; // 平行移動
FT_Matrix mat; // 変換行列
FT_Vector vec2; // さらに平行移動
} MatTrans;
これでどうだろうか? 論理座標変換と世界変形は、平行移動が必要になる。FT_Vector_Transformと平行移動の計算は使わないといけないのか。 完全に理解した。テストプログラム作成とコーディングに入る。 >>196
いや何が?
元々フォントは字毎であり、つまり字毎にベジエ曲線が定義されており、
それは各字の左下なり左上なり(どちらかは知らん)を基点として参照点が指定されているわけだろ。
そしてそれが今現在正しく回転してレンダリング出来ているんだから、
今現在も平行移動部分は出来ているんだよ。それをわざわざ持つ意味はない。
例えば、
ABCDEF
を90°回転して表示するケースを考えてみる。
Aは原点移動無しで回転するだけだ。ここまではいいだろ。
Bも原点移動無しで回転すると、当然Aの上に上書きされてしまうから、これが
F
E
D
C
B
A
の並びになる時点でBの原点移動(つまり平行移動)は今でも実装出来ていて、動いている。
これは理解出来ているか?
>>197
SetWorldTransformについては仕様に行列も書かれているだろ。(何故か転置されているが)
https://msdn.microsoft.com/ja-jp/library/cc428788.aspx
つってもここで詳細を問答しても埒が明かないし空回りを誘発するから、実装を優先してくれ。 ということは、逆行列の存在はフルランクの正方と同値。
逆行列がないとき、無変形で表示すればいいのかね。たぶん。 何が言いたいのか、何をやりたいのか、さっぱり分からん https://jira.reactos.org/secure/attachment/50653/TypeTest3.zip
OnFreeTypeDraw関数を編集して、FreeTypeの場合とFreeTypeではない場合のレンダリングをなるべく一致させなさい。
難しい。 レンダリング先のy座標が下向きというのがややこしい。
TA_BASELINEではない場合、描画開始位置をずらさないといけない。 5000円に増額。さぁ、誰が大金を手に入れるか!? 次は、SetWindowExtExとSetViewportExtExによるスケーリングを有効にする。 蟻人間が休み明けまでに実証コードを完成できると思う人は赤いボタンを、できないと思う人は青いボタンを押して下さい。 5ちゃんねる新機能「投票箱」
赤いボタン [投票] 58
青いボタン [投票] 12
さあ、あなたも投票してみよう! マッピングが全く分からん。
優先順位、変換式、、、 世界変形と論理座標変換が組み合わされるとややこしい。マッピングモードがMM_ANIISOTROPICの場合と仮定してもいいんだが。 コンパイラエラー C2872 あいまいなシンボルです。
コンパイルエラーが解消出来ません。
ご教授下さい。
■コンパイルエラー内容
error C2872: 'MarketplaceWebServiceProducts' : あいまいなシンボルです
■やりたいこと
AmazonのAPI「Marketplace Web Service API (MWS)」のHello world
以下ページの右上 オレンジ色の「Download」ボタンから入手できる
「MWSProducts_2011-10-01_v2017-03-22.dll」の使用
https://developer.amazonservices.jp/doc/products/products/v20111001/cSharp.html
■DLLの使用
Visual Studioの対象プロジェクトのプロパティから、
上記DLLの参照を追加しました
■コーディング
using namespace MarketplaceWebServiceProducts;//←ここはコンパイルOK
using namespace MarketplaceWebServiceProducts::Mock;//←★ここで上記コンパイルエラー
■ご質問
上位の「MarketplaceWebServiceProducts」が正常なのに、
下位の「Mock」を付けるとあいまいなシンボルになるのはなぜでしょうか。
解決策をご教授ください。(可能であれば実装をご提供ください)
■環境
Visual Studio
.Net 4.0
C++/Cli >>229
それCではなくてC++の話だよね?だったらスレチだよ。 >>230
ご回答ありがとうございます
>>231
>>232
言語関係ないコンパイルエラーなので、
上級者のみなさまなら回答できるかと存じます
ご回答引き続きお待ちしております >>233
namespace はCにはないものなのでCの上級者でも他の言語知らなかったら答えられないよ。 C++/CLIってC++ですらないからな。
そりゃともかく、ネームスペースで迷ってるんだから、ヘッダ追ってけばわかるのでは >>234
ご回答ありがとうございます
そうなのですね。Cにもinculude やname spaceあったように記憶しています。
>>235
ご回答ありがとうございます
C#と同じです。
ヘッダとはDLLの中身でしょうか?
DLLはバイナリなので中身が追えません。
とても困っているのでご教授引き続きお待ちしております >>233
マジで死ね
お前らみたいなのが質問出来る環境を壊して行っているのを自覚しろ >本当にありがとうございます!!!!!!!!!!!!
>キモヲタ万歳!!!!!!キモヲタ役に立つ!!!!!!!!
この質問者は、荒らしだから、無視しろ! https://jira.reactos.org/browse/CORE-15000
現在、ドットネットアプリのフォントレンダリングの問題に直面している。
恐らくビットマップの問題かフォントキャッシュか、データ破壊の問題と思われる。 ドットネットはレンダリングにGDI+(gdiplus)を使っている。
Gdipで始まる名前の関数はGDI+の関数だ。添付のログファイルを参照。 >>236
Cにはnamespaceはありません。
includeはプリプロセッサの問題なのでC++と同じなのが普通でしょうが、言語そのものとは無関係なテキスト変換処理です。 ここで、NtGdiSetBitmapBits関数は、SetBitmapBits関数と同じです。 i5-8600 のキャッシュラインのデータサイズを知りたいんですが、参照すべき文書等教えてくれたら助かります。
並列処理の開発中で、色々難儀してます。
難しいですが、面白いトピックで興味をそそられます。 >>245
>>1,13を読め
基準を言うなら、「それってCの10年選手が悩むこと?」かな
即答出来るような質問はここでは荒らしでしかない >>246
普通にCやってるだけなら10年やろうとCPUのキャッシュラインなど意識しないことも珍しくはないだろ。
つまらんこと書いてないでドキュメントへのリンクでも貼ってやればすぐ終わるじゃん。 >>247
ならお前が書けよ
そもそも非上級者スレで間に合う話をこっちに持ってくるな、でしかない
それ以前にキャッシュライン長が見えるプログラミングなんてそうそう出来るものではないし、
その辺も分かってないのだと思うよ
それがつまりお前が知らない理由でもあるわけでさ >>250
マジで死ねよ
俺達はお前らのそういうところが無理なんだよ >>249
ようはキャッシュラインの意識は上級者の技術なんだろ?
ならここでいいじゃん。
「俺達」とかお前ビョーキか 幼年期から障害者でしょ
ひまわり学級からたまに授業受けに来る障害者とか、常時こんな風に健常者にキレていた >>253
上級者ならキャッシュライン云々を質問するならプロセサを特定しないとダメ
ってことぐらいはわかるはず
なので彼はこのスレで質問する資格がない i5-8600っておもっくそ書いてるんですけど。
資格だの言うなら審査付きの会員制のサイトでも作れよw。 i5-8600 じゃ特定足らんの?
いや、新しいCPU全然知らないんで素朴な質問。
C言語でもなきゃ上級者でもないね。 結局、お前らゆとりの根本的な問題はそこなんだよ。
お前らが壊してきた物、今現在壊して行っている物を、認識出来ていない。
幼稚園児が公園の花壇を砂場と勘違いして破壊して行っているようなものだ。
ゆとりには悪気はないのだが、それが余計に救えない。
このスレももう終わりだ。
時間の問題だとは思っていたが、思っていたよりも早かった。 > 審査付きの会員制のサイト (>>256)
現実的にこれが必要な状況になりつつある。
技術的にはGitHub上にフォーラムを作ってもらえるのが一番有り難い。
そうすれば各自のリポジトリを見てどの程度の奴なのか判断出来る。
コミュニティの一生、というコピペがあるだろ。
https://dic.nicovideo.jp/a/コミュニティの一生
これの英語版もあるにはある。ただ、お前らは知らないのだと思うが、
実は海外の掲示板は日本人コミュニティとは異なり、さほど劣化しない。
その理由は俺は適切なBANにあると見ている。
つまり、普通にググれば辿り着けることを質問してくる馬鹿には1ヶ月のBANとか、だ。
そんなことをする奴は基本的に使い方を間違っているのだから、1ヶ月のROMを強制する、ということ。
俺の希望は上記の通りGitHubが対応してくれることだが、
そんな他力本願な事を言っていても始まらないので、俺自身も実際に立ち上げを準備中だ。
だから今現在調査中でもある。機能している日本語/英語のプログラミングコミュニティがあれば教えて欲しい。
海外掲示板は本当に些細なことでBANを打ってくる。これは当初はスルースキルなさすぎ、と思っていたが、
日本の掲示板はスルースキルさえあればやりたい放題で、それが荒廃に繋がっているのもまた事実。
そして最近上記の通り、海外掲示板は劣化しにくいことを目の当たりにしたので、BANについての見方も変わった。
なおこれは表面的にはゆとりが悪いんだが、
実際はゆとり世代は2chをはじめとしたBAN無しの環境しか知らないから「ネット上では何をやっても良い」と勘違いしていて、
それが旧世代の「ネットはリアルの延長からのスタート」(≒さすがにそこまでは、というラインが存在する)とフィットしないからだ。
つまり旧世代に受け入れられた2chのシステムは当然旧世代用に出来ていて、
だからこそそれがゆとり世代とフィットしないという、至極当然の帰結だ。
そしてスルースキルに関しては強い物が勝つに決まっているので、結果、2chは馬鹿ゆとりに占拠され、旧世代はパージされる。
だからその受け皿を用意しようというわけだ。
実際、俺も見切りを付けつつあるし、適当な移住先がないから自前で用意しよう、ということでもある。 だから繰り返すが、今現在調査中だから、機能しているプログラミングコミュニティを知っていれば教えて欲しい。
あと、ゆとりも、馬鹿ゆとりのままで留まっている奴らと、ゆとりの駄目な点を理解し始めてきた奴らと分化しつつある。
ここら辺について詳しく分かる、あるいは議論出来る場があれば教えて欲しい。
そこから人材を引っ張ってこれる可能性がある。
基本的に日本のシステムでは運営議論は内々で済ませてしまっていて、結果的に人材が育っていない。
だからゆとりは何故それが掲示板を劣化させるのか分からないし、効率的に知る方法もない。
(歴史(=スレを読めばいいだけ)ではなく、自身の経験によって学ぶしかないので、愚者を強いられる)
ただ、単純に言うと、白熱した議論で、或いは技術的に話していて言葉が激しくなったところで、掲示板が劣化することはない。
ゆとりがやっている、ググれば済むだけのことを質問し続けたりする方が、確実に死ぬ。
ゆとりは敬語を使えばいいと勘違いしているようだが、敬語なんて全く関係ない。
ただ、一応ここにも書いてはみたが、そもそもゆとりは問題を認識してないから、話が全く通じない。
だからもう諦めてる。
コミュ障というか、話し下手というか、ネットがあったからこそなんとかなった弊害か。
そこでそう受けるからそう展開する、というのが全く見えてない。これがどうにもならない。
が、まあとにかく、俺の見方は上記の通りで、準備中だ。
情報があればよろしく。必要であれば他にスレ立てる。 >>259
これは、宮台真司もいってますね
仲間だけで作るコミュニティを(氏の言葉でいえば)「クズども」から守るためクローズドにする、あるいはネットから遮断し推薦による入会だけに制限する動きは、プログラミングに限らず10年ほど前からの傾向だそう
>>260
>機能しているプログラミングコミュニティを知っていれば教えて欲しい
自分で探せ
そして見つけても人に教えるな
2ch に限らず社会は「人間のクズ」ばかり
クズから仲間を守らないやつはクズ >>261
それがお前らの駄目なところだ。
お前らが無邪気に踏みつけている土にも、誰かが花の種を植えていることはよくある。
それを認識出来てないから駄目なんだ。
お前らの、質問だけ丁寧で後でいきなり豹変する具合とか、キチガイじみてる。
ゆとりが独自の場所を持ててないのは、お前ら自身が確実に潰してる。
(新しいことをしようって奴は性格の問題で、ゆとり教育で変わる(減る)ものではないから)
>>262
自覚してないようだが、お前もクズだぞQZ。お前は話が通じない。
実際は性格ではなく記憶領域の問題だが、一般にはこれを認識出来る奴の方が少ない。
結果、お前も一般社会では十分クズ扱いのはずだ。
おそらくそれがお前がここにいる理由で、また、一向に上達している気配がない理由でもある。
が、まあ、分かった。ここでコミュニティを教えてもらえると思う方が間違いだ。
これはその通り。
アイデアだけはあれば頂こう。
なお、匿名にこだわってはいない。
可能であれば匿名がいいが、StackOverflow等も半匿名(コテハン制)なのは、
彼等がその方がいいと判断したからだ。
今現在、海外掲示板も持っていない機能として、ホワイトリスト式のBANを考えている。
荒れたときにcaptchaってのはよくあるが、それを強化する方向になる。
これについて、また、他にアイデアがあればよろしく。 >>263
スラドは「技術版ニュー速」で、あれは海外で言えば/tech/になる。
俺が作ろうとしているのは/prog/で、まあ、この板みたいな内容だ。 >>264
>実際は性格ではなく記憶領域の問題
興味深いですね、私は一般社会では性格異常と揶揄されているところではありますが、性格ではなく記憶領域の問題とは? だな。
キャッシュラインの話も上っ面でなんとなく聞き覚えはあるが具体的な知見も無く役に立つ話もできずリンクのひとつも貼れないだけだろ。
最初からプロセッサも指定してるのに >>255 これw
んで顔真っ赤にして暴走w
おれからもそういう上級者様を温かく受け入れてくれるコミュニティに引っ越すことを勧めるよ。 ReactOSにIMEを実装しろ、という要望が多いので、そろそろ。。。
https://github.com/reactos/reactos/blob/master/win32ss/user/ntuser/ime.c
まずはここにある関数を解析・実装しないといけない。
ただし、逆コンパイラ使っちゃダメ、絶対。 >>243
SetBitmapBitsの件も解決したよ。俺様有能。You know? お化けウィンドウについては、メッセージ時間をまず修正しないといけないのだが、まだ自動テストに失敗していて前に進めないんだよ。
https://github.com/reactos/reactos/pull/1259 読んでる人、居ますか? 居たらお返事下さい。
別の案件なんだが、ラジオやMP3で扱うような低品質な音声波形になるべくバイナリーデータを多く埋め込みたい。
多少ノイズが入っても誤り補正が働くようにしたい。
高速フーリエ変換はなんとか理解した。どうすれば、データ量と読み取り精度を両立できるか? 環境ノイズが混じることがある。テープレコーダーでも扱うことを想定して、録音・再生速度や音程は多少ずれることがある。誤りが多過ぎたら、やり直しを促すようにしたい。 そのノイズとは何かを定義できるなら、
それにあったノイズリダクションかければよろし ■ このスレッドは過去ログ倉庫に格納されています